2016-05-13 6 views
3

Ich habe erfolgreich den Blog 1 verfolgt, um MSBuild zum Erstellen eines SSIS-Projekts zu erhalten. Dies beinhaltete das Erstellen einer DLL und eines MSBuild-Skripts. Der Prozess funktioniert für jede einzelne Projektdatei korrekt.Wie MSBuild alle SSIS-Projekte verarbeiten kann

Ich suche nach Hilfe, um diesen Prozess für jede .dtproj-Datei zu funktionieren, die in einer Lösung (.sln) -Datei definiert ist. Ich habe über MSBuild Batching 2 gelesen, aber es bezieht sich auf Elemente, die im Build-Skript definiert sind. Ich möchte, dass es mit den Projekten in der Lösungsdatei funktioniert, sodass ich jedes Mal, wenn ein Projekt hinzugefügt/entfernt/verschoben wird, kein Skript manuell bearbeiten muss.

Irgendwelche Vorschläge oder Links zu Ansätzen? Danke, dass Sie sich die Zeit genommen haben, meine Frage zu lesen!

blog

MSBuild Batching

+0

Können wir davon ausgehen, dass alle unter einer Lösung aufgeführten Projekte SSIS sind? – billinkc

+0

Ja, alle Projekte in der Lösung sind SSIS –

Antwort

2

Wenn Sie mit der Batch-Option nicht wollen, können Sie so etwas wie dies versuchen:

<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> 

Dies wird erzeugt eine MsBuild Projektversion der Lösung einschließlich Alle enthaltenen Projekte (lesen Sie über msbuildemitsolution), danach wird die generierte "msbuild solution" (.metaproj) importiert und die ProjectReference-Elemente verwendet, um sie einzeln mit dem "DeploymentFileCompi" auszuführen lerTask“und "DeployProjectToCatalogTask"

Sie können dies wie folgt aufrufen:

Für Körperbau:

msbuild SSIS.proj/t: Initialisieren

msbuild SSIS.proj/t Bauen

Für Deploy:

msbuild SSIS.proj/t: Initialisieren

msbuild SSIS.proj/t: Bereitstellen

Das Initialisieren Ziel wird die "msbuild Lösung" erzeugen, und Sie müssen dieses Ziel rufen Stellen Sie sicher, dass der Inhalt aktualisiert wird.

Sie können beliebige der am Anfang definierten Eigenschaften in der Befehlszeile übergeben, um das Skript für verschiedene Lösungen zu verwenden.

Wenn Sie für jedes Projekt verschiedene "Ordner" benötigen, können Sie die Elementmetadaten "Dateiname" (d. H.% (ProjectReference.Filename) anstelle von $ (PROJECTNAME)) verwenden.

Hinweis: Dies ist kein abschließendes funktionierendes Skript, aber es sollte eine klare Vorstellung von der vorgeschlagenen Lösung geben. Wenn Sie die Knoten "DeploymentFileCompilerTask" und "DeployProjectToCatalogTask" des Skripts kommentieren, können Sie sie ausführen und einige Nachrichten sehen die Konsole mit den Daten, die verarbeitet werden.

+0

Danke für Ihre Antwort. Ich werde das am Morgen versuchen. –

Verwandte Themen