dll.config没有复制到临时的asp.net文件夹中

时间:2013-06-18 11:06:37

标签: asp.net configurationmanager

我有一个Web.Api应用程序,它使用来自不同程序集的函数。对于这个程序集,我创建了一个.config文件,我存储了一些字符串。

我正在使用以下代码来获取其中一个字符串:

private static string LogUrl = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings.Settings["WebApi-LogUrl"].Value.ToString();

Assembly.GetExecutingAssembly().Location指向临时的asp.net文件,(C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ dc2fa3d4 \ 834ee436 \ assembly \ dl3 \ cd068512)但我的dll.config文件没有复制到那里。 结果是我无法调试我的应用程序,并且在真正的IIS服务器上运行代码时它也给出了null。

如果我在获取设置之前设置了一个断点,我可以抓住临时文件夹,当我复制我的dll.config文件时,一切正常,但我应该如何自动完成。

我将dll.config文件的属性设置为“Build action:content”,“Copy to output directory:always”

任何帮助将不胜感激,现在谷歌搜索了几个小时。 :(

祝你好运, 彼得拉尔森!

1 个答案:

答案 0 :(得分:20)

我使用以下代码解决了这个问题:

// The dllPath can't just use Assembly.GetExecutingAssembly().Location as ASP.NET doesn't copy the config to shadow copy path
var dllPath = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath;
var dllConfig = ConfigurationManager.OpenExeConfiguration(dllPath);

// Get the appSettings section
var appSettings = (AppSettingsSection) dllConfig.GetSection("appSettings");
return appSettings.Settings;

关键是:

new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath

我在阅读Zhaph - Ben Duguid的答案后想出了解决方案:https://stackoverflow.com/a/2434339/103778

现在我可以拿起我的网络应用程序的bin目录中的DLL配置文件。

我已经written up a blog post进一步讨论了这个问题。