我正在开发一个应用程序,该应用程序利用 WCF 服务模型概念通过远程服务器上的 IIS 处理来自 WPF 客户端的数据库调用。为了保证我可以在不破坏生产应用程序的情况下修改和测试服务层,我部署了第二个“调试”服务层,并希望通过在“调试”和“发布”。为此,我保留了两个单独的 App.config 文件,并根据所选的构建配置运行构建后事件:
if "Debug"=="$(ConfigurationName)" xcopy "$(ProjectDir)App_Debug.config" "$(TargetPath).config" /Y
if "Release"=="$(ConfigurationName)" xcopy "$(ProjectDir)App_Release.config" "$(TargetPath).config" /Y
if "Debug"=="$(ConfigurationName)" xcopy "$(ProjectDir)App_Debug.config" "$(TargetDir)$(TargetName).vshost.exe.config" /Y
if "Release"=="$(ConfigurationName)" xcopy "$(ProjectDir)App_Release.config" "$(TargetDir)$(TargetName).vshost.exe.config" /Y
这可行,我检查输出目录,它们具有适当的连接字符串和参数来访问所需的服务。但是,当我在 Visual Studio 中点击“开始”按钮时,它会用我的项目中的 App.config 文件覆盖这两个配置文件......如果我删除或重命名 App.config,那么我的构建后事件将失败。
我注意到的下一件事是禁用 Visual Studio 托管进程 (vshost.exe) 解决了覆盖问题,除了在 VS 中调试变得非常缓慢......这似乎源于每次重新加载组件和调试符号。我认为仅此一项就足以保持启用 vshost 进程,并结合使用它提供的任何其他好处。
为什么即使解决方案已构建并且是最新的,vshost 仍会覆盖我的配置文件?我能做些什么来阻止 vshost 或 Visual Studio 这样做吗?我可以利用其他策略来实现相同的功能吗?后备方案是记住在测试或部署时复制和粘贴适当的配置文件,但这是构建过程中的又一步,对于任何刚接触应用程序的人来说都是麻烦和困惑的。