我正在尝试在Windows服务和ASP.NET MVC网站之间引用一些常见的配置设置。我是通过在App.config或Web.config(分别)中使用appSettings上的file属性来完成的。正在引用的文件(名为common.config)是同一解决方案中单独项目中的链接文件。该common.config设置为内容,两个项目中的始终复制。
This stack answer to a similiar question似乎至少建议使用configSource这个解决方案。我不想要configSource,因为我只希望在两个项目中共享一些属性。 更新:我刚试过这个,而且configSource也不起作用。它找不到配置文件。这使我相信common.config不会被视为带有副本的内容。
示例App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings file="common.config">
<add key="NotCommonKey" value="1"/>
</appSettings>
</configuration>
示例Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings file="common.config">
<add key="NotCommonKey2" value="2" />
</appSettings>
</configuration>
示例common.config(内容 - &gt;始终复制)
<appSettings>
<add key="CommonKey" value="1" />
</appSettings>
我正在使用 AppSettings 属性中的 ConfigurationManager / WebConfigurationManager 读取。
任何想法为什么当common.config是一个链接文件时,它的AppSettings值没有被使用,当它没有被链接时它是否正常工作?
谢谢!
答案 0 :(得分:12)
在Web.Config中你必须添加&#34; bin /&#34; (见下面的例子)。
默认情况下,web.config不会复制到bin文件夹中,但是文件common.config是,因此您必须从web.config添加路径。在非Web项目中,默认行为是将App.config复制到名为MyProgram.exe.config的bin文件夹,并且与common.config位于同一目录中。
<appSettings file="bin/common.config">
答案 1 :(得分:0)
使用“ bin / ...”的想法很好,但是会导致错误,指出“ /”在生成的虚拟路径中是无效字符。
正确的解决方法是使用“ bin ...”。
欢呼
答案 2 :(得分:0)
我用它来访问另一个.exe的配置文件,不确定它是否可以与MVC项目一起使用,但这可能会使您更接近:
string proj2Exe = @"C:\projects\proj2\bin\Debug\proj2.exe";
Configuration proj2Config = ConfigurationManager.OpenExeConfiguration(proj2Exe);
string mysetting = proj2Config .AppSettings.Settings["ThatSetting"].Value;