如何让MSBuild处理所有SSIS项目

时间:2016-05-13 19:02:11

标签: ssis msbuild

我已成功关注博客1,以便让MSBuild构建一个SSIS项目。这涉及创建一个DLL和一个MSBuild脚本。该过程适用于任何单个项目文件。

我正在寻求帮助,让这个过程适用于解决方案(.sln)文件中定义的每个.dtproj文件。我已阅读有关MSBuild批处理2但它引用了在构建脚本中定义的项目。我希望它可以与解决方案文件中的任何项目一起使用,因此每次添加/删除/移动项目时我都不必手动编辑脚本。

任何建议或方法链接? 感谢您抽出宝贵时间阅读我的问题!

blog

MSBuild Batching

1 个答案:

答案 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;您可以执行脚本的节点,并在控制台中查看将要处理的数据的一些消息。