Ale*_*bak 5 deployment msbuild database-project
我正在尝试在自动构建服务器处理中部署数据库项目(dbproj格式,而不是新的SSDT sqlproj).我找到了以下内容:
当我在我的Msbuild脚本中使用Exec任务调用deploy时 - 一切正常:
<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj
/t:Deploy
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用Msbuild任务重复此操作时 - 它的行为有所不同:
<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"
Targets="Deploy"
Properties="Configuration=$(BuildConfiguration);
TargetDatabase=$(DeployDatabaseName);
TargetConnectionString="$(DeployDatabaseConnectionString)";
OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
" />
Run Code Online (Sandbox Code Playgroud)
DeployDatabaseConnectionString中的分号破坏了Msbuild任务:
<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
Run Code Online (Sandbox Code Playgroud)
它会报告这样的事情:
名称"Integrated Security"包含无效字符"".
但是如果我用百分比编码值 - %3B替换分号 - 它将在SqlDeployTask中破坏:
错误MSB4018:"SqlDeployTask"任务意外失败.
将TargetConnectionString传递给SqlProject的部署目标的正确方法是什么?
PS:我可以忍受exec任务很好,但是在msbuild脚本中调用msbuild.exe会伤害我内在的完美主义者.
我找到了正确的方法 - 新的 Msbuild 允许在项目上定义附加属性元数据。因此,有了这个功能,一切都工作正常,并且没有转义\编码问题
<ItemGroup>
<DbProjectToBuild Include="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj">
<AdditionalProperties>Configuration=$(BuildConfiguration)</AdditionalProperties>
<AdditionalProperties>OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\</AdditionalProperties>
<AdditionalProperties>TargetDatabase=$(DeployDatabaseName)</AdditionalProperties>
<AdditionalProperties>TargetConnectionString="Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False"</AdditionalProperties>
</DbProjectToBuild>
</ItemGroup>
<MSBuild Projects="%(DbProjectToBuild.Identity)" Targets="Build;Deploy" />
Run Code Online (Sandbox Code Playgroud)