如何在.net应用程序中共享应用程序配置?

时间:2008-09-30 21:21:44

标签: c# .net app-config

我有一个相对较大的.Net系统,它由许多不同的应用程序组成。我想在所有应用程序之间共享一个配置文件,而不是拥有许多不同的app.config文件。

我还想在我的机器上开发一个版本,一个版本供其他人在他们的机器上开发,一个版本用于测试系统,一个版本用于实时系统。

有一种简单的方法吗?

5 个答案:

答案 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以在多个应用程序之间共享它们。这使部署更成问题。