【发布时间】:2013-02-10 18:46:50
【问题描述】:
Visual Studio 2012。SQL Server 数据库项目。
在解决方案中创建了四个构建配置:Debug、DevDb、TestDb、LocalDb。
在项目中创建了三个发布配置文件:DevDb.publish.xml、TestDb.publish.xml、LocalDb.publish.xml
按 F5 按钮 (!) 我想:
- 部署项目,使用来自项目属性的连接字符串if 构建配置是 Debug。
- 发布带有连接字符串的项目 从相应的发布配置文件 if 构建配置是 DevDb、TestDb 或 LocalDb。
为此,我编辑项目 (.sqlproj) xml,试图捕捉 Deploy 目标的调用并用自定义行为替换标准 Deploy 目标:
<Target Name="Deploy">
<!-- The first statment is for Debug configuration -->
<MSBuild Condition=" '$(Configuration)' == 'Debug' "
Targets="Deploy"
Projects="$(MSBuildProjectFile)"
Properties="Configuration=$(Configuration);"
/>
<!-- The second statement is for DevDb, TestDb, LocalDb configurations -->
<MSBuild Condition=" '$(Configuration)' != 'Debug' "
Targets="SqlPublish"
Projects="$(MSBuildProjectFile)"
Properties="SqlPublishProfilePath=$(Configuration).publish.xml;
Configuration=$(Configuration);"
/>
</Target>
第二条语句运行良好,我将部署到正确的目的地。
问题在于第一条语句 - 它产生了循环依赖。
错误 MSB4006:在涉及目标“部署”的目标依赖图中存在循环依赖。
我的问题是:如何与标准目标相交(捕获和替换)以及是否需要再次调用标准目标?
或者我是否正在尝试重新发明轮子并且有另一种方法可以做我想做的事? (我想要的内容在上面的“按下 F5 按钮”下进行了描述:)
【问题讨论】:
标签: visual-studio-2012 msbuild database-project sql-server-data-tools msbuild-target