使用链接文件的 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 / WebConfigurationManagerAppSettings 属性中读取数据。

知道为什么当 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 的转换?

在Web.config或App.config中的添加自定义配置

在Web.config或App.config中的添加自定义配置