预构建事件后忽略 App.Config
Posted
技术标签:
【中文标题】预构建事件后忽略 App.Config【英文标题】:App.Config Ignored After Pre-Build Event 【发布时间】:2011-07-16 05:26:20 【问题描述】:我有一个包含多个项目和多个开发人员的解决方案,每个人都有自己的环境(当然)。为了管理每个环境之间的连接字符串,我为每个环境创建了几个 app.config 文件:app.config.dev、app.config.qa 等。
预构建事件只是将 app.config.$(ConfigurationName) 复制到 app.config。这个预构建事件是针对解决方案中的每个项目完成的,并且连接字符串包含在每个项目中(包括测试项目)。
当我使用预构建事件来管理 app.config 文件时,找不到连接字符串。我可以通过 2 种方法使测试正常运行:1. 不要使用预构建事件来管理 app.config 文件选择,而是自己执行或 2. 如果我检查 app.config 并使其可写,那么预构建事件就可以正常工作了。
我们正在使用带有 VSS 的 Visual Studio 2008。
我已经到了最后一根白发了,有什么想法吗? 提前致谢!
解决方案
更新预构建事件以确保 app.config 文件即使已签入也是可写的。以下使用的预构建事件:@echo off
attrib -r $(ProjectDir)app.config
if errorlevel 1 goto AttribFailed
copy $(ProjectDir)app.config.$(ConfigurationName) $(ProjectDir)app.config
goto BuildOK
:AttribFailed
echo Attrib -r Failed on $(ProjectDir)app.config
exit 1
:BuildOK
echo Copy Done
【问题讨论】:
【参考方案1】:听起来您的 app.config 不应该受源代码控制 - 只有特定于构建配置的配置文件(app.config.dev、app.config.qa 等)。
话虽如此,您可以使签入文件在 VSS 下可写。例如,通过 Windows 资源管理器,取消选中文件的“只读”属性。 (每次签入时都必须这样做。)
【讨论】:
如果 app.config 不在解决方案中且不在源代码管理下,则在构建应用程序时不会使用它,并且我无权访问配置字符串。我将尝试在构建事件之前使其可写而不检出文件。 更新了 Pre-Build 事件以使文件可写就可以了。谢谢@HansPassant 的建议。【参考方案2】:让 .config 文件签入有一个副作用,即文件保持只读状态。这有一个副作用,您不能将文件复制到只读文件上,也不能删除它。这对解释为什么你不能让它工作大有帮助。
【讨论】:
最好在构建后事件中使用 attrib.exe +r 使副本可写。 我已经尝试过了,但是我弄乱了 attrib 的语法。添加错误处理代码有助于识别问题。以上是关于预构建事件后忽略 App.Config的主要内容,如果未能解决你的问题,请参考以下文章