Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio:区分调试和发布模式的app.config_Visual Studio_App Config_Production Environment - Fatal编程技术网

Visual studio Visual Studio:区分调试和发布模式的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

换句话说,我想用一个app.config进行测试,然后用另一个app.config发布


目前,我保留了一个名为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文件中不需要更多的重大更改。谢谢