8

我有一个相对较大的.Net 系统,其中包含许多不同的应用程序。我不想拥有许多不同的 app.config 文件,而是希望在所有应用程序之间共享一个配置文件。

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

有没有一种简单的方法可以做到这一点?

4

5 回答 5

6

对于多个应用程序需要的大量配置,我会将这些配置放入一个中央存储库,例如一个数据库,一个公共位置的文件。

要为不同的环境使用不同版本的配置文件,请为每个不同的环境创建一个构建配置和一个以环境命名的配置文件,例如:

生产 production.app.config 测试 test.app.config

然后,您可以使用预构建事件将正确的配置复制到项目中的默认 app.config 上。然后,这将照常复制到您的输出目录。

预构建事件看起来与上面类似,只需使用 $(Configuration) 为您想要的环境获取适当的文件。

您可以将其与上述内容结合起来,将整个构建特定的配置文件复制到每个项目中。

于 2008-09-30T21:43:44.883 回答
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>

请注意每个组中出现的新<AppConfig>标记。

于 2008-09-30T21:28:31.143 回答
2

您可以向元素添加一个属性,告诉它从不同的文件加载该数据,而不是将<add>元素添加到配置文件的部分。然后,您可以将常用设置保存在该常用文件中。<appSettings>file=<appSettings>

请参阅MSDN 库中的appSettings 元素(常规设置架构)

于 2008-09-30T22:58:22.660 回答
1

可以使用NTFS 符号链接来共享 .NET .config 文件。我已经在一个由 ASP.NET 应用程序、控制台应用程序等组成的解决方案中成功地使用了它。

于 2009-05-24T21:48:39.203 回答
0

您还可以将配置设置放入 machine.config 以在多个应用程序之间共享它们。但是,这使部署更加成问题。

于 2008-10-01T08:42:25.610 回答