2011-03-16 62 views
2

我有几个项目和几个开发人员的解决方案,每个都有自己的环境(当然)。为了管理每个环境之间的连接字符串,我为每个环境创建了几个app.config文件:app.config.dev,app.config.qa等。App.Config预构建事件后忽略

预生成事件只需复制app.config。 $(ConfigurationName)到app.config。此预生成事件是针对解决方案中的每个项目完成的,每个项目(包括测试项目)中都包含连接字符串。

当我使用预生成事件来管理app.config文件时,无法找到连接字符串。我可以通过2种方法让测试运行良好:1.不要使用预生成事件来管理app.config文件选择,并且自己或者2。如果我检出app.config并使其可写,那么预生成事件就可以正常工作。

我们正在使用Visual Studio 2008和VSS。

我倒在我最后的灰色头发这里,有什么想法吗? 在此先感谢!

SOLUTION 更新的预生成事件,以确保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资源管理器,取消选中该文件的“只读”属性。 (每次检入时都必须执行此操作。)

+0

如果app.config不在解决方案中,也不在源代码控制之下,那么在构建应用程序时不会使用它,并且我无法访问配置字符串。我将尝试在构建事件之前将其写入,而不检查文件。 – 2011-03-16 15:56:31

+0

更新了Pre-Build事件以使文件可写。谢谢@HansPassant的建议。 – 2011-03-16 16:18:02

1

离开签入的.config文件有一个副作用,文件保持为只读状态。这有一个副作用,您不能将文件复制到只读文件,并且无法删除它。这对解释为什么你无法完成工作有很大的帮助。

+0

检入文件不必是只读的。 – 2011-03-16 01:44:10

+0

更好的做法是在后期构建事件中使用attrib.exe + r写入副本。 – 2011-03-16 02:04:38

+0

我试过那个Hans – 2011-03-16 15:59:01