使用链接文件的 App 或 Web Config 中的 AppSettings
Posted
技术标签:
【中文标题】使用链接文件的 App 或 Web Config 中的 AppSettings【英文标题】:AppSettings in App or Web Config Using a Linked File 【发布时间】:2013-06-30 12:20:42 【问题描述】:我正在尝试引用 Windows 服务和 ASP.NET MVC 网站之间的一些常见配置设置。我通过在 App.config 或 Web.config (分别)中使用 appSettings 上的文件属性来做到这一点。被引用的文件(名为 common.config)是同一解决方案中单独项目中的链接文件。该 common.config 在 both 项目中设置为 Content,并带有 Copy Always。
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 示例(内容 -> 始终复制)
<appSettings>
<add key="CommonKey" value="1" />
</appSettings>
我正在使用 ConfigurationManager / WebConfigurationManager 从 AppSettings 属性中读取数据。
知道为什么当 common.config 是一个链接文件时,它的 AppSettings 值没有被使用,而当它没有被链接时它可以正常工作?
谢谢!
【问题讨论】:
1.您确定 common.config 与您的其他配置文件位于同一文件夹中吗? 2. 对 common.config 的任何更改都不会反映在您的应用中,直到您重新启动。 1.我确实认为这就是问题所在。我认为由于某种原因,当我运行调试时,它不会将链接的 common.config 复制到 web app/console app 文件夹中,即使它设置为复制文件。 我注意到,如果我创建一个控制台应用程序,它使用驻留在另一个项目中的链接配置文件,它确实可以工作。它必须特定于 web.config 文件。我在 CodePlex aspnet.codeplex.com/workitem/10351 上为此创建了一个问题 【参考方案1】:在 Web.Config 中,您必须添加“bin/”(参见下面的示例)。
默认情况下,web.config 不会复制到 bin 文件夹中,但文件 common.config 是,因此您必须添加来自 web.config 的路径。在非 Web 项目中,默认行为是将 App.config 复制到名为 MyProgram.exe.config 的 bin 文件夹中,并且与 common.config 位于同一目录中。
<appSettings file="bin/common.config">
【讨论】:
错误 - 将配置文件复制到 bin 文件夹的唯一情况是 web.config 标记为“编译”的构建操作。在这种情况下,它可以被赋予程序集名称,但带有扩展名“config”。即 MyProgram.dll.config 我想你误解了我的意思——我的意思是 web.config 没有被复制到 bin 文件夹中,但文件 common.config 是,因此你必须添加来自 web.config 的路径。在非 Web 项目中,默认行为是将 app.config 复制到名为 MyProgram.exe.config 的 bin 文件夹中,并且与 common.config 位于同一目录中 更新了答案,好吗? 完成。感谢您的澄清。积分奖励。 我接受答案。我没有这个项目了,但这对我来说似乎是正确的。不完全确定为什么我没有首先在此文件夹中查找该文件。谢谢。【参考方案2】:使用“bin/...”的想法很好,但会导致错误提示“/”在生成的虚拟路径中是无效字符。
正确的解决方法是使用“bin...”。
干杯
【讨论】:
你能再解释一下吗?【参考方案3】:我用它来访问另一个 .exe 的配置文件,不确定它是否适用于 MVC 项目,但这可能会让你更接近:
string proj2Exe = @"C:\projects\proj2\bin\Debug\proj2.exe";
Configuration proj2Config = ConfigurationManager.OpenExeConfiguration(proj2Exe);
string mysetting = proj2Config .AppSettings.Settings["ThatSetting"].Value;
【讨论】:
以上是关于使用链接文件的 App 或 Web Config 中的 AppSettings的主要内容,如果未能解决你的问题,请参考以下文章
在 web.config 或 app.config 中存储分层应用程序设置
从 .NET 中的 app.config 或 web.config 读取设置
使用Azure Web App上的web.config将子域重写到目录
NuGet 包如何包含 app.config 和 web.config 的转换?