C# 替换<;appname>;。exe.config与后构建不兼容';不适用于<;appname>;。vshost.exe.config
我们正在使用C# 替换<;appname>;。exe.config与后构建不兼容';不适用于<;appname>;。vshost.exe.config,c#,.net,vb.net,visual-studio,app-config,C#,.net,Vb.net,Visual Studio,App Config,我们正在使用vbproj中的AfterBuild目标来替换配置文件,具体取决于所选配置: <Target Name="AfterBuild" Condition="'$(Configuration)' != 'Release'"> <Delete Files="$(TargetDir)$(TargetFileName).config" /> <Copy SourceFiles="$(ProjectDir)$(Configuration).config" De
vbproj
中的AfterBuild
目标来替换配置文件,具体取决于所选配置:
<Target Name="AfterBuild" Condition="'$(Configuration)' != 'Release'">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
例如,假设我们有3种配置:调试、测试和发布。Debug是本地调试配置。测试是用于用户验收测试的预生产环境。发布是我们的生产环境
在App.config
文件中,我们存储了发布环境的配置。在Debug.config
文件中,我们存储本地调试需要的配置。在Test.config
文件中,我们存储用户验收环境的配置
AfterBuild
目标的目标是在构建/执行调试配置(Debug.config
)或测试配置(Test.config
)时替换发布配置(App.config
)
当我们发布应用程序(发行版,App.config
)或构建应用程序并启动bin\.exe
(调试或测试)时,一切都按预期运行
但是,如果我们使用Visual Studio宿主进程从Visual Studio启动应用程序,则正确的配置将复制到bin\.exe.config
,但Visual Studio似乎没有将正确的配置复制到bin\.vshost.exe.config
。我们尝试清理解决方案,在调试之前执行重建,在启动之前手动删除bin\.vshost.exe.config
文件,但托管进程似乎总是从默认的App.config
文件复制配置。无论我们尝试从调试配置还是测试配置开始,都会出现相同的问题
为了增加混乱,我们创建了多个测试项目,使用相同的AfterBuild
目标,其中一些工作正常,另一些工作不正常。所有项目都在使用.NETFramework4.5.1,但我们也重现了.NET4.5的问题。这似乎不是由项目类型引起的,因为我们可以通过控制台应用程序和Windows窗体应用程序重现该问题
是什么导致了这个问题
或者,我们是否可以使用另一种解决方案来管理每个环境的配置
注释
- 我们在发布环境中使用默认的App.config文件 因为ClickOnce似乎不支持后期构建目标
- 我们在Windows桌面上使用Visual Studio Express 2013,因此不能使用任何像SlowCheetah这样的插件
目标,根据所选配置指定替换App.config
:
<Target Name="BeforeCompile">
<Delete Files="$(ProjectDir)App.config" />
<Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(ProjectDir)App.config" />
<Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
</Copy>
</Target>
与
App.config
App.config
所有配置文件都将分组在Visual Studio中的主App.config
文件下:
对我来说,它有助于禁用VisualStudio托管过程
删除以下内容中的复选标记:
Project -> Preferences -> Debug -> Enable Visual Studio hosting process
这将阻止Visual Studio覆盖*config文件。这只是一个好主意。使用PreBuild事件并在app.config上复制所需的配置,让VS执行其常规工作?是否有兴趣查看某人是否知道如何执行此操作。。。我们尝试了,但失败了,我们求助于手动更改配置文件,以便在内部运行,而不知道为什么不添加另一个
命令。或者更简单一点,只要打开主机进程选项。@HansPassant:我很确定配置是在启动时复制的,而不是在构建时复制的。如果我们添加了另一个
命令,它在启动时也不会被执行。@Steve:我们尝试了你建议的方法,但我们仍然观察到相同的行为。如果我们将配置从Release切换到Debug,则App.config包含所选配置(Debug)的正确参数,但宿主进程仍然使用以前的配置(Release)…thx作为带有DependentUpon
的配置,我不会想到这一点。同样的问题,您在哪里添加了复制命令?在里面
<None Include="Debug.config" />
<None Include="Release.config" />
<None Include="Debug.config">
<DependentUpon>App.config</DependentUpon>
</None>
<None Include="Release.config">
<DependentUpon>App.config</DependentUpon>
</None>
Project -> Preferences -> Debug -> Enable Visual Studio hosting process