Visual studio Visual Studio:区分调试和发布模式的app.config
在发布模式下构建时,是否有办法自动使用单独的app.config 换句话说,我想用一个app.config进行测试,然后用另一个app.config发布Visual studio Visual Studio:区分调试和发布模式的app.config,visual-studio,app-config,production-environment,Visual Studio,App Config,Production Environment,在发布模式下构建时,是否有办法自动使用单独的app.config 换句话说,我想用一个app.config进行测试,然后用另一个app.config发布 目前,我保留了一个名为app.config.production的单独副本,并在构建发布后手动覆盖bin\Release\Application.exe.config。我最近发布了一个类似SO主题的迟到回复: 为了清楚起见,我将在这里重复: 这对聚会来说有些晚了,但我偶然发现了一种很好的方法,可以为app.config文件实现web.tran
目前,我保留了一个名为app.config.production的单独副本,并在构建发布后手动覆盖bin\Release\Application.exe.config。我最近发布了一个类似SO主题的迟到回复: 为了清楚起见,我将在这里重复: 这对聚会来说有些晚了,但我偶然发现了一种很好的方法,可以为
app.config
文件实现web.transform
方法。(即,它使用名称空间http://schemas.microsoft.com/XML-Document-Transform
)
我认为它“很好”,因为它是一种纯xml方法,不需要第三方软件。
父/默认App.config文件是根据您的各种构建配置派生而来的。
然后,这些子体只覆盖它们需要覆盖的内容。
在我看来,这比必须维护x
完整复制的配置文件数量(如在其他答案中)要复杂和健壮得多
已在此处发布演练:
看,妈妈-在我的IDE中没有显式的编译后事件 一种简单而快速的方法是创建第二个文件“App.release.config”并插入此预构建事件:
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.config" "$(ProjectDir)App.debug.config"
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.release.config" "$(ProjectDir)App.config"
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.debug.config" "$(ProjectDir)App.config"
以及此生成后事件:
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.config" "$(ProjectDir)App.debug.config"
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.release.config" "$(ProjectDir)App.config"
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.debug.config" "$(ProjectDir)App.config"
这可能有点奇怪,但它允许您继续使用
.Settings
文件作为调试设置,这些文件仍然链接到App.config
。App.release.config
必须手工构建,但切换此功能非常容易 我不知道这是否有帮助,但app.config将识别标准的MSBUILD替换字符串,如$(配置)。我强烈建议将SlowCheetah用于app.config转换。在此处访问此nuget gem通过上下文菜单在解决方案资源管理器中卸载项目
通过关联菜单编辑.csproj
文件并添加以下内容:
<PropertyGroup>
<AppConfig>App.$(Configuration).config</AppConfig>
</PropertyGroup>
App.$(配置).config
与top answer类似,但通过这种方法,如果您愿意,您可以看到实际文件,并且intellisense不会在csproj文件中抱怨:
<Target Name="SetAppConfig" BeforeTargets="Compile">
<Copy SourceFiles="debug.config" DestinationFiles="app.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
<Copy SourceFiles="release.config" DestinationFiles="app.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
</Target>
在何处添加这些生成事件?@Adrian在解决方案中右键单击您的项目,单击“属性”并打开“生成事件”按钮。我非常喜欢这样,简单有效,不依赖随时间变化的msbuild magic。旁注:SlowCheetah仅在发布作品时有效,调试时不会。这不再是caseNice!我希望改变很快就会到来。SlowCheetah是一个比构建前/构建后脚本更好的解决方案。对于VS 2017,在上面的演练中,
中的v10.0
必须替换为v15.0
。尽管intellisense没有将appconfig显示为有效属性。这很有效。我认为它在开发的最后阶段是最有用的,因为在app.config文件中不需要更多的重大更改。谢谢