我有一个相对较大的.Net系统,它由许多不同的应用程序组成。我想在所有应用程序之间共享一个配置文件,而不是拥有许多不同的app.config文件。
我还想在我的机器上开发一个版本,一个版本供其他人在他们的机器上开发,一个版本用于测试系统,一个版本用于实时系统。
有一种简单的方法吗?
答案 0 :(得分:6)
对于多个应用程序所需的大量配置,我会将此配置放入一个中央存储库,例如:数据库,文件位于公共位置。
要为不同的环境使用不同版本的配置文件,请为每个不同的环境创建构建配置,并为环境命名一个配置文件,例如:
生产production.app.config test test.app.config
然后,您可以使用预构建事件在项目的默认app.config上复制正确的配置。然后,这将正常复制到您的输出目录。
预构建事件看起来与上面类似,只需使用$(Configuration)来获取所需环境的相应文件。
您可以将其与上述内容结合起来,将整个特定于构建的配置文件复制到每个项目中。
答案 1 :(得分:2)
您可以在“子”项目中使用构建后事件(属性 - >构建事件)将配置文件从主项目复制到其他项目,如下所示:
copy /Y c:\path\to\master\project\app.config $(TargetPath).config
exit 0
(作为最后一行的“exit 0”可防止构建错误。)
要为不同的构建目标(“RELEASE”,“DEBUG”等)创建单独的配置文件,您可以编辑NOTEPAD.EXE中的.csproj文件(或.vbproj),为每个目标添加AppConfig标记团体,像这样:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AppConfig>debug.app.config</AppConfig>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.\bin\Devel\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AppConfig>release.app.config</AppConfig>
</PropertyGroup>
请注意每个组中都有新的&lt; AppConfig&gt; 标记。
答案 2 :(得分:2)
您可以向<add>
元素添加<appSettings>
属性,告诉其加载该数据,而不是将file=
元素添加到配置文件的<appSettings>
部分来自不同的文件。然后,您可以将常用设置保存在该公共文件中。
请参阅MSDN Library中的appSettings Element (General Settings Schema)。
答案 3 :(得分:1)
可以使用NTFS symbolic links来共享.NET .config文件。我已经看到这在包含ASP.NET应用程序,控制台应用程序等的解决方案中成功使用。
答案 4 :(得分:0)
您还可以将配置设置放入machine.config以在多个应用程序之间共享它们。这使部署更成问题。