如何在.net应用程序中共享应用程序配置?
我有一个相对较大的.Net系统,其中包含许多不同的应用程序。与其拥有许多不同的app.config文件,我不希望在所有应用程序之间共享一个配置文件。
在计算机上进行开发时,我还希望有一个版本,在他们的计算机上进行开发的其他人可以使用一个版本,测试系统可以使用一个版本,实时系统可以使用一个版本。
有一个简单的方法可以做到这一点吗?
解决方案
我们可以在"子"项目上使用构建后事件(属性->构建事件)将配置文件从主项目复制到其他项目,如下所示:
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>
请注意,每个组中都存在新的<AppConfig>标记。
对于多个应用程序所需的大量配置,我会将其配置到一个中央存储库中,例如数据库,文件放在公共位置。
要将配置文件的不同版本用于不同的环境,请为每个不同的环境创建一个构建配置,并以该环境命名一个配置文件,例如:
生产production.app.config
测试test.app.config
然后,我们可以使用构建前事件在项目中的默认app.config上复制正确的配置。然后将其照常复制到输出目录中。
预构建事件看起来类似于上面的事件,只需使用$(Configuration)来获取所需环境的适当文件。
我们可以将其与上述内容结合起来,以将特定于构建的整体配置文件复制到每个项目中。
可以在配置文件的<appSettings>部分中添加<add>
元素,而不必在配置文件的<appSettings>部分中添加file =
属性,以告诉它从另一个文件中加载数据。 。然后,我们可以将通用设置保留在该通用文件中。
请参阅MSDN Library中的appSettings元素(常规设置架构)。
我们还可以将配置设置放入machine.config中,以在多个应用程序之间共享它们。但是,这使部署更加成问题。
可以使用NTFS符号链接来共享.NET .config文件。我已经看到此方法在包含ASP.NET应用程序,控制台应用程序等的解决方案中成功使用了。