我想用3个不同的项目中使用一个单一的app.config。
如何访问配置?
ConfigurationManager.AppSettings["config1"]
我想用3个不同的项目中使用一个单一的app.config。
如何访问配置?
ConfigurationManager.AppSettings["config1"]
比方说,你有这样的文件夹结构:
做这个:
对于在Solution Explorer中每个项目:
Add
> Existing Item
选择Add as link
的下拉框旁边Add
按钮。
编辑补充:
您正确地指出,上述方法仅适用于共享文件了建立时间。 要使用在运行时将共享文件,看到这个问题的答案 。
常见的配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="appSettings"
type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</configSections>
<appSettings>
<add key="key1" value="value1"/>
</appSettings>
</configuration>
访问映射配置文件
ConfigurationFileMap fileMap = new ConfigurationFileMap(file); //Path to your config file
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
string value = configuration.AppSettings.Settings["key1"].Value;
这里是在VS 2008中的“添加现有项目”对话框:
添加现有项目对话框http://i27.tinypic.com/72bwo6.jpg
点击小下拉指标“添加”按钮,然后选择“添加为链接”从上下文菜单中。
渣
我发现这个按钮,打开app.config中的链接,但导致在构建再次为每个项目创建单独的配置文件,因此,部署3项目的时候,我将有3个配置文件。 我想做的事,是保持所有项目的单个文件在一定的解决方案。 我能做到这一点?
是的-你可以这样做,但你应该这样做?
在.NET应用程序的基本假设是,一个应用程序=一个配置文件。 开箱即用,并用一个简单的方法,你不能共享应用程序之间的配置文件。
如果你创建自己的自定义配置部分,你可以“外包”给那些外部文件,这可能是共享的。 想象一下,你创建一个名为“MyConfiguration”,那么你的app.config将看起来像你自己的自定义配置部分:
<configuration>
<configSections>
<section name="MyConfiguration"
type="MyConfigurationSection, MyConfigurationAssembly" />
</configSections>
<MyConfiguration>
<nestedElement>
<dateTimeValue>10/16/2006</dateTimeValue>
<integerValue>1</integerValue>
</nestedElement>
</MyConfiguration>
</configuration>
你可以在自己的文件你“MyConfiguration”部分,并从您的应用程序的配置中引用它:
<configuration>
<configSections>
<section name="MyConfiguration"
type="MyConfigurationSection, MyConfigurationAssembly" />
</configSections>
<MyConfiguration configSource="MyConfiguration.config" />
</configuration>
而你的“MyConfiguration.config”将包含然后:
<MyConfiguration>
<nestedElement>
<dateTimeValue>10/16/2006</dateTimeValue>
<integerValue>1</integerValue>
</nestedElement>
</MyConfiguration>
通过这样做,你可以“外部化”,从而共享至少大部分的你的配置设置 - 提供他们在自己的自定义配置部分。
欲了解更多信息和良好的介绍到.NET 2.0及以上配置的奥秘,看到.NET 2.0配置了乔恩Rista的三部系列在CodeProject上。
强烈推荐,写得很好,非常有帮助!
渣
一个设计方案是为了避免直接从您的类库项目共访问的app.config,从而避免了额外的外部依赖。
相反,只有你的可执行项目所知道的配置文件,它可以适当的配置信息明确地传递给库时,从他们创建的对象或初始化它们。
我理解,这是一个老问题,但有实现这一目标的一个更简单的方法。 如果您在使用Visual Studio 2008或更高版本有一个名为“共享工程”项目类型。
共享项目可以有几乎任何类型的其他项目可以包含。 这不仅为C#但是对于VS2015支持所有语言。 当一些包含在共享项目中添加对它的引用(见下文)后,可用于其他项目。
在共享项目VS共享库类的主要区别是,当你编译程序的一切,是在共享项目将直接编译到您的项目不作为单独的文件(.DLL,.EXE)。 认为它像一切是在共享项目中插入其他项目。 这里是设置了这一点,并使用它的一小教程:
通过选择在Solution Explorer解决方案文件- >新建- >项目或右键单击创建新的共享项目,然后选择添加- >新建项目 。 当对话框显示向上选择“共享工程”,为该项目在这个例子中TestShared的名称。
新项目被添加后,您可以添加任何你需要提供给其他项目。 在这种情况下,我们将添加的app.config。 右键点击共享项目,然后选择添加- >新建项目 。 选择Visual C# - >数据 - > XML文件命名它显然是App.config中。
最后,通过右键点击你需要共享的项目,然后选择添加 - >引用的项目添加到共享项目的参考。 在参考文献管理器对话框中选择您的共享项目,它将在左边的“共享工程”项目下上市。
现在一切是在共享项目在其他项目中可用,也没有必要做任何使用进口或类似的东西。 它只是工作。 这种模式是非常方便的,当你正在开发一个程序,需要有几种不同的GUI的(在Windows,iOS版,Android版等)。 例如,你可以有一个共享的项目为“核心”功能,然后对每一个你想在你的程序来支持不同的操作系统的一个独立的GUI项目。
我意识到这是一个较老的问题,而是因为这在谷歌出现了我想,当别人都在寻找他们知道这个VS功能非常强大的同样的事情,我会回答这个问题如此。
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config = ConfigurationManager.OpenExeConfiguration(Path.Combine(@"D:\", "config.exe"));
foreach (string key in config.AppSettings.Settings.AllKeys)
{
string value = config.AppSettings.Settings[key].Value;
ConfigurationManager.AppSettings.Set(key, value);
}