14

我正在尝试引用 Windows 服务和 ASP.NET MVC 网站之间的一些常见配置设置。我通过在 App.config 或 Web.config (分别)中使用 appSettings 上的文件属性来做到这一点。被引用的文件(名为 common.config)是同一解决方案中单独项目中的链接文件。在两个项目 中,common.config 都设置为Content with 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>

我正在使用从AppSettings属性读取的ConfigurationManager / WebConfigurationManager 。

任何想法为什么当 common.config 是一个链接文件时,它的 AppSettings 值没有被使用,当它没有被链接时它正常工作?

谢谢!

4

3 回答 3

15

在 Web.Config 中,您必须添加“bin/”(参见下面的示例)。

默认情况下,web.config 不会复制到 bin 文件夹中,但文件 common.config 是,因此您必须添加来自 web.config 的路径。在非 Web 项目中,默认行为是将 App.config 复制到名为 MyProgram.exe.config 的 bin 文件夹中,并且与 common.config 位于同一目录中。

<appSettings file="bin/common.config">
于 2014-03-13T20:59:53.807 回答
0

使用“bin/...”的想法很好,但会导致错误提示“/”在生成的虚拟路径中是无效字符。

正确的解决方案是使用“bin ...”。

干杯

于 2019-08-14T09:05:52.180 回答
0

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

string proj2Exe = @"C:\projects\proj2\bin\Debug\proj2.exe";
Configuration proj2Config = ConfigurationManager.OpenExeConfiguration(proj2Exe);
string mysetting = proj2Config .AppSettings.Settings["ThatSetting"].Value;
于 2019-12-19T15:16:23.547 回答