Wie kann ich verschiedene DLLs in einem Projekt erstellen?
-
03-07-2019 - |
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?
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:
-
, um die Assemblierung-Version ändern:
#if SOME_COMPILER_SYMBOL [assembly: AssemblyVersion("1.0.0.0")] #else [assembly: AssemblyVersion("1.0.0.1")] #endif
-
, um die Schlüsseldatei ändern - schafft zwei Keyfiles mit dem
sn
Werkzeug und inAssemblyInfo.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.