我已成功关注博客1,以便让MSBuild构建一个SSIS项目。这涉及创建一个DLL和一个MSBuild脚本。该过程适用于任何单个项目文件。
我正在寻求帮助,让这个过程适用于解决方案(.sln)文件中定义的每个.dtproj文件。我已阅读有关MSBuild批处理2但它引用了在构建脚本中定义的项目。我希望它可以与解决方案文件中的任何项目一起使用,因此每次添加/删除/移动项目时我都不必手动编辑脚本。
任何建议或方法链接? 感谢您抽出宝贵时间阅读我的问题!
答案 0 :(得分:2)
如果您不想使用批处理选项,可以尝试以下方法:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="Build">
<PropertyGroup>
<MySolution Condition="'$(MySolution)'==''">MySolution.sln</MySolution>
<Configuration Condition="'$(Configuration)'==''">Release</Configuration>
<SSISServer Condition="'$(SSISServer)'==''">MyServer</SSISServer>
<PROJECTNAME Condition="'$(PROJECTNAME)'==''">MyProjectName</PROJECTNAME>
</PropertyGroup>
<UsingTask TaskName="DeploymentFileCompilerTask" AssemblyFile="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.SqlServer.IntegrationServices.Build.dll" />
<UsingTask TaskName="DeployProjectToCatalogTask" AssemblyFile="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.SqlServer.IntegrationServices.Build.dll" />
<Import Condition="Exists('$(MySolution).metaproj')" Project="$(MySolution).metaproj"/>
<Target Name="Initialize">
<MSBuild Projects="$(MySolution)" Properties="Configuration=$(Configuration);MSBuildEmitSolution=1" Targets="Clean" />
</Target>
<Target Name="Build">
<Message Text="**************Building SSIS project: %(ProjectReference.FullPath) for configuration: $(Configuration)**************" />
<DeploymentFileCompilerTask
InputProject="%(ProjectReference.FullPath)"
Configuration="$(CONFIGURATION)"
ProtectionLevel="DontSaveSensitive">
</DeploymentFileCompilerTask>
</Target>
<Target Name="Deploy">
<Message Text="**************Deploying SSIS project: %(ProjectReference.FullPath) for configuration: $(Configuration)**************" />
<Message Text="..\%(ProjectReference.RootDir)%(ProjectReference.Directory)\bin\$(CONFIGURATION)\%(ProjectReference.FileName)%(ProjectReference.Extension).ispac"/>
<DeployProjectToCatalogTask
DeploymentFile="..\%(ProjectReference.RootDir)%(ProjectReference.Directory)\bin\$(CONFIGURATION)\%(ProjectReference.FileName)%(ProjectReference.Extension).ispac"
Instance="$(SSISServer)"
Folder="$(PROJECTNAME)"
CreateFolder="true"/>
</Target>
</Project>
这将生成解决方案的MsBuild项目版本,包括所有包含的项目(阅读有关msbuildemitsolution),之后它将导入生成的&#34; msbuild解决方案&#34; (.metaproj)并使用ProjectReference项目使用&#34; DeploymentFileCompilerTask&#34;逐个执行它们。和&#34; DeployProjectToCatalogTask&#34;
您可以这样称呼:
For Build:
msbuild SSIS.proj / t:初始化
msbuild SSIS.proj / t:Build
部署:
msbuild SSIS.proj / t:初始化
msbuild SSIS.proj / t:部署
Initialize目标将生成&#34; msbuild解决方案&#34;并且您需要调用此目标以确保更新内容。
您可以在命令行中传递开头定义的任何属性,以将脚本用于不同的解决方案。
如果您需要不同的&#34;文件夹&#34;对于每个项目,您可以使用&#34;文件名&#34;项元数据(即%(ProjectReference.Filename)而不是$(PROJECTNAME))。
注意:这不是最终的工作脚本,但是如果你评论&#34; DeploymentFileCompilerTask&#34;它应该清楚地说明所提出的解决方案。和&#34; DeployProjectToCatalogTask&#34;您可以执行脚本的节点,并在控制台中查看将要处理的数据的一些消息。