预构建事件后忽略 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.configif errorlevel 1 goto AttribFailed

copy $(ProjectDir)app.config.$(ConfigurationName) $(ProjectDir)app.configgoto BuildOK

:AttribFailedecho Attrib -r Failed on $(ProjectDir)app.configexit 1

:BuildOKecho 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的主要内容,如果未能解决你的问题,请参考以下文章

使用项目默认预构建事件执行预构建事件

构建服务器上的预构建事件咕噜声,没有找到咕噜声

为啥新层在修改后的预训练 pytorch 模型中被忽略?

Visual Studio 预构建事件:批处理文件退出代码为 -1

仅在重建时运行预构建事件

WIX 项目无法加载指定的预构建事件