2009-05-08 4 views
1

Ich habe 2 C# -Projekten in meiner Lösung, von denen beide DLLs:MSBuild: Wie überschreibt Ausgabedateiname, um sich von Assemblyname zu unterscheiden?

  • MyApp.UI.WPF.csproj
  • MyApp.UI.WinForms.csproj

Mein Setup-Prozess garantiert, dass Nur einer von ihnen wird zu einem bestimmten Zeitpunkt installiert werden. Was auch immer das sein mag, es wird vom MyApp.exe-Bootstrapper aufgenommen, wenn der Benutzer die Anwendung ausführt.

Da beide DLLs denselben Eintrittspunkt enthält, würde ich das Bootstrap-Programm zu halten, wie generic:

class Bootstrapper 
{ 
    static void Main() 
    { 
     var asm = Assembly.Load("MyApp.UI"); 

     // Execute the UI entry point here. 
    } 
} 

Dies bedeutet, dass ich beide DLLs den gleichen Assembly-Namen in Projektoptionen geben: „MyApp.UI ". Das Problem besteht darin, dass MSBuild den Assemblynamen als den Ausgabename verwendet, der einen Konflikt für mich darstellt.

Ist es möglich, MSBuild zu überzeugen, stattdessen einen anderen Dateinamen zu verwenden, z. der Projektname?

Antwort

2

Sie könnten Ihrem Build einen <PostBuildEvent> hinzufügen, um Ihre Ausgabebaugruppen in einen allgemeinen Namen umzubenennen.

+0

Das ist, was ich getan habe. Ich fügte auch ein pre-build Ereignis hinzu, das die Zieldatei löscht, wenn sie bereits existiert. Umbenennen würde manchmal ohne dies scheitern. – aoven

1

Dies wäre eine Funktion der CoreCompile-Task, die Sie überschreiben müssen, um den/out-Schalter auf csc zu ändern. Dies ist keine empfohlene Übung, würde aber Ihr Ziel erreichen.

Verwandte Themen