对于基于Visual Studio 2010 Web的应用程序,我们拥有配置转换功能,通过这些功能我们可以为不同的环境维护多个配置文件。但是,对于Windows服务/ WinForms或控制台应用程序,App.Config文件不具有相同的功能。
有一个解决方法可用这里建议:应用XDT魔术App.Config。
然而,这不是直接的,需要一些步骤。有一个更简单的方法来实现相同的app.config文件?
你可以使用每个配置的单独配置文件,例如app.Debug.config,app.Release.config,然后在您的项目文件中使用配置变量:
<PropertyGroup>
<AppConfig>App.$(Configuration).config</AppConfig>
</PropertyGroup>
这将根据你正在构建的配置创建正确的ProjectName.exe.config文件。
根据我的经验,你需要做的环境特定的东西,如连接字符串,appsettings和经常smpt设置。配置系统允许在单独的文件中指定这些东西。所以你可以在你的app.config / web.config中使用它:
<appSettings configSource="appsettings.config" />
<connectionStrings configSource="connection.config" />
<system.net>
<mailSettings>
<smtp configSource="smtp.config"/>
</mailSettings>
</system.net>
我通常做的是将这些特定于配置的部分放在一个名为ConfigFiles的子文件夹(在解决方案根目录或项目级别,依赖)中的单独文件中。我为每个配置定义一个文件,例如smtp.config.Debug和smtp.config.Release。
然后你可以像这样定义一个预生成事件:
copy $(ProjectDir)ConfigFiles\smtp.config.$(ConfigurationName) $(TargetDir)smtp.config
在团队开发中,您可以通过在约定中包含%COMPUTERNAME%和/或%USERNAME%来进一步调整。
当然,这意味着目标文件(x.config)不应该放在源代码控制中(因为它们是生成的)。您仍然应该将它们添加到项目文件,并将其输出类型属性设置为“始终复制”或“如果新的复制”虽然。
简单,可扩展,适用于所有类型的Visual Studio项目(控制台,winforms,wpf,web)。