【发布时间】:2011-02-14 08:44:33
【问题描述】:
我的 Visual Studio 2008 解决方案中有两个独立的项目。两者都有自己的 App.config。但在一个项目中,我需要在另一个项目的 App.config 中定义一两个属性。是否可以共享其他项目的部分 App.config 内容?
【问题讨论】:
-
同上link
我的 Visual Studio 2008 解决方案中有两个独立的项目。两者都有自己的 App.config。但在一个项目中,我需要在另一个项目的 App.config 中定义一两个属性。是否可以共享其他项目的部分 App.config 内容?
【问题讨论】:
在这种情况下,我认为使用数据库来存储一些配置数据是理想的。每个应用都做自己的事情,但它们会通过共享数据库来获取这些常见信息。
编辑:我说得太早了!看起来我和 OP 都对配置文件有所了解 =D
【讨论】:
是的——当然。任何配置部分都可以“外部化” - 例如:
<appSettings configSource="AppSettings.DEV.config" />
<connectionStrings configSource="MyConnection.config" />
或
<system.net>
<mailSettings>
<smtp configSource="smtp.TEST.config" />
对比
<system.net>
<mailSettings>
<smtp configSource="smtp.PROD.config" />
任何配置部分都可以放入可以在项目之间共享的单独文件中 - 但没有配置部分组,不幸的是,有时很难知道哪个是哪个。
另外,在某些情况下,Visual Studio 会抱怨(使用红色波浪下划线)“configSource”应该是无效的 - 但它是 - 它是在 .NET 配置系统中的 ConfigurationSection 对象上定义的。
更新:
另一个似乎很少有开发人员知道和使用的功能是 Visual Studio 中能够添加来自不同项目的现有文件作为链接:
有了这个,您可以将文件链接添加到您的本地项目中,并且它们将始终保持最新状态。如果您需要进行一些文件级别的共享(例如通用配置文件等),则可以极大地提高生产力!
【讨论】:
试试这个:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings file="PROD.config">
<add key="common.Currency" value="GBP" />
</appSettings>
</configuration>
【讨论】:
仅使用“正在运行”的 app.config,但您可以像 marc_s 所说的那样去外部。
您还可以创建“共享”的 .Settings 文件。转到“共享”项目属性,左侧的“设置”选项卡,创建具有应用程序范围的设置,并将顶部的访问修饰符设置为公共。然后,在您的其他项目中,您可以使用 ClassLibrary1.Properties.Settings.Default.SettingName 来访问它。它将是强类型的,但您可能在编译时需要它。
【讨论】:
DefaultSettingValueAttribute 结尾,这与 app.config 中的常规应用设置不同。但是,任何与默认值的偏差都会出现在每个单独的 app.config 中。由于设置存储在 app.config 的一个部分中,您可以使用两者的组合并使用 configSource 将其外部化,同时保持编译的默认值和强类型。我想这一切都取决于你在寻找什么。
我喜欢做的事情,尤其是在尝试在库和测试之间协调 ServiceModel 元素时,使用 configSource 将目标库中的配置片段化,并在我的测试项目中简单地使用link/copy always 片段。
这样我只维护一个位置。
您可以更进一步,只需在解决方案中拥有一个公共目录并链接所有项目中的片段。
【讨论】: