2016-05-13 3 views
3

Я успешно последовал за блогом 1, чтобы получить MSBuild для создания проекта SSIS. Это связано с созданием dll и скриптом MSBuild. Процесс работает правильно для любого файла проекта.Как заставить MSBuild обрабатывать все проекты SSIS

Я ищу помощь в том, чтобы этот процесс работал для каждого .dtproj-файла, определенного в файле решения (.sln). Я прочитал о MSBuild Batching 2, но он относится к элементам, которые определены в скрипте сборки. Я хочу, чтобы он работал с любыми проектами в файле решения, поэтому мне не нужно вручную редактировать сценарий каждый раз, когда проект добавляется/удаляется/перемещается.

Любые предложения или ссылки на подходы? Спасибо, что нашли время, чтобы прочитать мой вопрос!

blog

MSBuild Batching

+0

Можно ли считать, что все проекты, перечисленные в решении, являются SSIS? – billinkc

+0

Да, все проекты в решении SSIS –

ответ

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), после чего он импортирует сгенерированное «решение msbuild» (.metaproj) и использует элементы ProjectReference для их выполнения один за другим с помощью «DeploymentFileCompi» lerTask»и "DeployProjectToCatalogTask"

Вы можете назвать это так:

Для сборки:

MSBuild SSIS.proj/т: Инициализировать

MSBuild SSIS.proj/т : Построение

Для развертывания:

MSBuild SSIS.proj/т: Инициализировать

MSBuild SSIS.proj/т: Развертывание

Мишень Initialize будет генерировать "MsBuild решение", и вы должны назвать эту цель убедитесь, что контент обновлен.

Вы можете передать любое из свойств, определенных в начале в командной строке, для использования сценария для разных решений.

Если вам нужны разные «Папки» для каждого проекта, вы можете использовать метаданные элементов «Имя файла» (т. Е.% (ProjectReference.Filename) вместо $ (PROJECTNAME)).

Примечание. Это не окончательный рабочий сценарий, но он должен дать четкое представление о предлагаемом решении, если вы прокомментируете узлы сценария «DeploymentFileCompilerTask» и «DeployProjectToCatalogTask», которые вы можете выполнить, и просмотреть некоторые сообщения в консоль с данными, которые будут обработаны.

+0

Спасибо за ваш ответ. Я попробую это утром. –

Смежные вопросы