13

我有一个使用来自不同程序集的函数的 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 文件的属性设置为“构建操作:内容”、“复制到输出目录:始终”

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

最好的问候,彼得拉尔森!

4

1 回答 1

24

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

// 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 配置文件。

从那以后,我写了一篇博文进一步讨论这个问题。

于 2013-10-02T17:37:05.167 回答