Frage

Ich habe eine Frage, die ich weiß nicht, ob es gelöst werden kann. Ich habe eine C # Projekt auf Visual Studio 2005 und ich mag verschiedene DLL-Namen erstellen, die auf einer Präprozessorkonstante abhängig. Was ich in diesem Moment haben, ist die Präprozessorkonstante, zwei snk Dateien und zwei Assembly guid. Außerdem erstelle ich zwei Konfigurationen (Debug und Debug Preprocessor) und sie kompilieren mit perfekt die snk und guid angemessen ist.

#if PREPROCESSOR_CONSTANT
[assembly: AssemblyTitle("MyLibraryConstant")]
[assembly: AssemblyProduct("MyLibraryConstant")]
#else
[assembly: AssemblyTitle("MyLibrary")]
[assembly: AssemblyProduct("MyLibrary")]
#endif

Nun, ich habe die beiden Baugruppen in den GAC zu setzen. Die erste Baugruppe ist ohne Probleme hinzugefügt, aber die zweite nicht.

Was kann ich tun, um zwei oder mehr verschiedene Baugruppen von einem Visual Studio-Projekt?

Es ist möglich, dass ich auf „AssemblyInfo.cs“ eine neue Zeile zu schließen vergessen haben je nach Präprozessorkonstante der DLL-Namen zu ändern?

War es hilfreich?

Lösung

Hier ist ein Beispiel Post-Build-Ereignis:

if "$(ConfigurationName)" == "Debug" goto Debug
if "$(ConfigurationName)" == "Release" goto Release

goto End

:Debug
del "$(TargetDir)DebugOutput.dll"
rename "$(TargetPath)" "DebugOutput.dll"

:Release
del "$(TargetDir)ReleaseOutput.dll"
rename "$(TargetPath)" "ReleaseOutput.dll"

:End

Ändern DebugOutput.dll und ReleaseOutput.dll an den richtigen Dateinamen. Sie können "Debug" ändern und "Release" andere Konfigurationen zu unterstützen, und Abschnitte hinzufügen, um weitere Konfigurationen zu unterstützen.


Das Skript wird zwei DLLs mit unterschiedlichen Dateinamen erstellen; zwei verschiedene AssemblyNames zu erstellen, haben Sie zwei Möglichkeiten.

Die Assemblierung-Name wird gebaut wie folgt :

Name <,Culture = CultureInfo> <,Version = Major.Minor.Build.Revision> <, StrongName> <,PublicKeyToken> '\0'

Sie haben also entweder die Kultur Informationen zu ändern, die Version oder den starken Namen.

Die beiden einfachsten Optionen sind:

  1. , um die Assemblierung-Version ändern:

    #if SOME_COMPILER_SYMBOL
    [assembly: AssemblyVersion("1.0.0.0")]
    #else
    [assembly: AssemblyVersion("1.0.0.1")]
    #endif
    
  2. , um die Schlüsseldatei ändern - schafft zwei Keyfiles mit dem sn Werkzeug und in AssemblyInfo.cs:

    #if SOME_COMPILER_SYMBOL
    [assembly: AssemblyKeyFile("FirstKey.snk")]
    #else
    [assembly: AssemblyKeyFile("SecondKey.snk")]
    #endif
    

Diese beiden Optionen werden bis in zwei verschiedenen Baugruppen führen, da die GAC weiß -., Da sie den vollständigen Montag Namen vergleichen, und nicht der ‚einfache‘ Name

Andere Tipps

Visual Studio nicht pro-Konfiguration Ausgabedateinamen nicht zulassen. Sie können jedoch die Ausgabedatei als Teil des Build-Skript umbenennen. Man könnte dies für das jeweilige Projekt in Frage im MSBuild-Skript tun.

Zum Beispiel setzt diese am Ende Ihrer CSPROJ Datei:

<Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)\YourAssembly.dll" DestinationFiles="$(OutputPath)\YourAssemblyRenamed.dll"/>
    <Delete Files="$(OutputPath)\YourAssembly.dll"/>
</Target>

ich havn't dies versuche, ich so nehmen Sie es als ein freundlichen Vorschlag. Versuchen Sie manuell bearbeiten Sie Ihre CSPROJ Hinzufügen oder uncommenting das Before Ziel mit einem snipped inspiriert von den folgenden:

<Target Name="BeforeBuild">
    <AssemblyName Condition="'$(Configuration)' == 'Release'">MyReleaseName</AssemblyName>
    <AssemblyName Condition="'$(Configuration)' == 'Debug'">MyDebugName</AssemblyName>
</Target>

ich denke, dass es nicht so ist. Ausgabebaugruppe Name ist streng festgelegt in Projekteinstellungen:. Eine Baugruppe pro Projekte

Auch AssemblyAttributes Sie zeigt Eigenschaften sichtbar Montage (zB in Windows Explorer) angegeben, nicht ist es Dateinamen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top