2008-11-05 6 views
5

Ich habe eine Situation, in der ich die Ausgabe Assembly von einem Projekt in das Ausgabeverzeichnis meiner Zielanwendung mit MSBuild kopieren möchte, ohne hart-Codierung Pfade in meinem MSBuild Aufgabe kopieren Hier ist das Szenario:MSBuild Kopie Ausgabe von einem anderen Projekt in die Ausgabe des aktuellen Projekts

  • Projekt A - Web Application Project
  • Projekt B - Dal-Interface-Projekt
  • Projekt C - Dal Implementation Project

Es gibt eine Business-Schicht zu, hat aber keine Relevanz für das MSBuild-Problem, das ich lösen möchte.

Meine Business-Schicht hat einen Verweis auf mein Dal.Interface-Projekt. Mein Webprojekt hat einen Verweis auf die Business-Ebene. Wenn Sie einen Build erstellen, werden die Business-Layer- und Dal.Interface-Projekte in die Ausgabe übernommen. So weit, ist es gut. Damit die Webanwendung ausgeführt werden kann, benötigt sie die Dal-Implementierung. Ich möchte nicht, dass die Implementierung irgendwo referenziert wird, da ich die Kodierung für die Schnittstelle erzwingen möchte und keine Referenz bedeutet, dass es nicht in Intellisense usw. angezeigt wird.

Also dachte ich, dass ich das durch die MSBuild-Kopie behandeln könnte Operation als eine AfterBuild-Aufgabe (Ich habe die Dal Implementation-Setup zu erstellen, wenn das Webprojekt erstellt, nur nicht referenziert). Ich möchte Pfade oder irgendetwas anderes in den MSBuild-Parametern nicht fest codieren, also versuche ich herauszufinden, wie ich die Ausgabe des Dal-Projekts aus der MSBuild-Datei des Webanwendungsprojekts referenzieren kann.

So basierend auf den Projekten oben erwähnt, ist dies, was ich sehen will geschehen:

  1. Web App build
  2. Alle erforderlichen Projekte bauen gekickt wird (bereits konfiguriert, so dass dies der Fall ist)
  3. MSBuild "Afterbuild" Task startet und die Ausgabe von Projekt C (Dal Implementation) ist in das Verzeichnis bin von Project A (Web App)

kopiert Teil 3 ist, wo ich bin stecken.

Ich bin mir sicher, dass dies getan werden kann, ich finde nur keine gute Referenz zu helfen. Vielen Dank im Voraus für jede Hilfe.

Antwort

8

Ich habe diese Arbeit gemacht, obwohl ich gerne eine sauberere Lösung finden würde, die Vorteil der integrierten Parameter innerhalb MSBuild (wie $ (TargetDir) usw.), aber auf das Projekt Ich möchte die Ausgabe greifen zum). Wie auch immer, hier ist was ich getan habe:

<Target Name="AfterBuild"> 
<Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/> 
</Target> 

Ich würde gerne eine sauberere Lösung sehen, aber das sollte für jetzt tun.

+0

ich + 1'd dieses Alter vor. Wie Sie vorgeschlagen haben, ist das nicht sauber - offensichtlich bricht dies, wenn sich der OutDir ändert, z. beim Bauen mit TeamBuild. (Nur für den Fall, dass andere dies sehen und die Mängel nicht erkennen). Siehe auch http://stackoverflow.com/questions/2325598/determining-outputs-of-a-projectreference-in-msbuild/2325620#2325620 –

+0

Siehe http: // stackoverflow.com/questions/2325598/determining-outputs-eines-projectreference-in-msbuild/2325620 # 2325620 für ein Beispiel für eine Art und Weise der Adressierung des Anliegens erwähnte ich –

0

Sie möchten also eine Referenz haben, aber nicht in VS. Sie möchten, dass es bei Bedarf erstellt wird und wie jede andere Content Datei ausgegeben wird. Hier ist, wie Sie es tun würden:

<Target Name="IncludeDALImplementation" BeforeTargets="AfterBuild"> 
    <MSBuild Projects="..\DalImplementation\DAL.csproj" BuildInParallel="$(BuildInParallel)" Targets="Build"> 
    <Output TaskParameter="TargetOutputs" ItemName="DalImplementationOutput" /> 
    </MSBuild> 

    <ItemGroup> 
    <Content Include="@(DalImplementationOutput)" /> 
    </ItemGroup> 
</Target> 
+0

Ich bekomme diesen Fehler: 'Die" Content "Aufgabe war nicht gefunden. "beim Kompilieren in Visual Studio – Thorarin

+0

@Thorarin: Korrigiert Code, tut mir leid. Beachten Sie, dass es noch nicht getestet – Jonathan

+0

Ich machte die gleiche Änderung und es hat funktioniert. Ich musste die Abhängigkeiten und die Ausgabe des Projekts selbst kopieren, also musste ich meine Vorgehensweise ein wenig ändern. – Thorarin