【问题标题】:How to have MSBuild process all SSIS projects如何让 MSBuild 处理所有 SSIS 项目
【发布时间】:2016-09-10 02:16:00
【问题描述】:

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

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

有任何建议或方法的链接吗? 感谢您花时间阅读我的问题!

blog

MSBuild Batching

【问题讨论】:

  • 我们可以假设一个解决方案下列出的所有项目都是 SSIS 吗?
  • 是的,解决方案中的所有项目都是 SSIS

标签: ssis msbuild


【解决方案1】:

如果您不想使用批处理选项,可以尝试以下方法:

<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),然后将导入生成的“msbuild解决方案”(.metaproj)并使用ProjectReference项一一执行使用“DeploymentFileCompilerTask”和“DeployProjectToCatalogTask”

你可以这样称呼:

对于构建:

msbuild SSIS.proj /t:Initialize

msbuild SSIS.proj /t:Build

对于部署:

msbuild SSIS.proj /t:Initialize

msbuild SSIS.proj /t:Deploy

Initialize 目标将生成“msbuild 解决方案”,您需要调用此目标以确保内容已更新。

您可以传递在命令行开头定义的任何属性,以将脚本用于不同的解决方案。

如果每个项目需要不同的“文件夹”,您可以使用“文件名”项元数据(即 %(ProjectReference.Filename) 而不是 $(PROJECTNAME))。

注意:这不是最终的工作脚本,但它应该清楚地说明建议的解决方案,如果您评论脚本的“DeploymentFileCompilerTask”和“DeployProjectToCatalogTask”节点,您可以执行它并在使用将要处理的数据进行控制台。

【讨论】:

猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多