使用链接文件的应用程序或Web配置中的应用程序设置

本文关键字:应用程序 配置 设置 Web 文件 链接 | 更新日期: 2023-09-27 18:20:57

我试图在Windows服务和ASP.NET MVC网站之间引用一些常见的配置设置。我是通过在App.config或Web.config中使用appSettings上的file属性(分别)来执行此操作的。被引用的文件(名为common.config)是同一解决方案中单独项目中的链接文件。在两个项目中,该common.config都设置为内容始终复制

这个类似问题的堆栈答案似乎表明,至少对于configSource来说,这个解决方案是可行的。不过,我不想要configSource,因为我只希望这两个项目中的一些属性是通用的更新:我刚刚尝试过,configSource也不起作用。它找不到配置文件。这让我相信common.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值不会被使用,而当它没有链接时,它会正常工作?

谢谢!

使用链接文件的应用程序或Web配置中的应用程序设置

在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/…"的想法很好,但会导致一个错误,即"/"是生成的虚拟路径中的无效字符。

正确的解决方案是使用"bin…"

干杯

我用它来访问另一个.exe的配置文件,不确定它是否能与MVC项目一起工作,但这可能会让你更接近:

string proj2Exe = @"C:'projects'proj2'bin'Debug'proj2.exe";
Configuration proj2Config = ConfigurationManager.OpenExeConfiguration(proj2Exe);
string mysetting = proj2Config .AppSettings.Settings["ThatSetting"].Value;