2009-11-23 10 views
46

Ich habe ein Projekt, das über seine API eine gewisse Erweiterbarkeit zu einer anderen Anwendung hinzufügt. Ich möchte jedoch das gleiche Projekt für mehrere Versionen ihrer Anwendung verwenden können, da der Code größtenteils identisch ist.Gibt es eine Möglichkeit, Assemblyreferenzen basierend auf Buildkonfiguration in Visual Studio anzugeben?

Jede Version der Anwendung erfordert jedoch einen Verweis auf die richtige Assembly für diese Version der Software. Sie laden ihre Assemblys in den GAC, selbst wenn ich die Version der Assembly angeben könnte, um basierend auf Build-Konfiguration zu verwenden, würde ich gut sein. Gibt es eine Möglichkeit, dies innerhalb von VS zu tun, oder brauche ich ein externes Build-Tool?

Antwort

54

Es gibt einen Weg, dies zu tun, aber Sie müssen Ihre Projektdateien von Hand bearbeiten. Auf die Projektdateien kann ein Attribut Condition in vielen der Elemente angewendet werden, einschließlich desjenigen für Referenzen.

Sie diese auf Ihre Referenzen hinzufügen können angeben, wenn die Referenz verwendet werden soll:

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'"> 
</Reference> 
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'"> 
</Reference> 
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'"> 
</Reference> 

Sie dann mehrere Buildkonfigurationen definieren (V1, V2, V3) und jede Referenz wird nur in der jeweiligen aufgenommen werden gewählte Build-Konfiguration.

Kombinieren Sie dies mit bedingten Kompilierungssymbolen und #if Anweisungen in Ihrem Code und Sie können tun, was Sie wollen.

Eine Sache, auf die Sie achten müssen, ist, dass es einfach ist, Visual Studio die bedingten Attribute aus der Projektdatei entfernen zu lassen.

+0

Das funktionierte perfekt, Tonnen von Kudos. Sogar Visual Studio spielt gut, solange ich nicht mit diesen Referenzen spiele, einschließlich funktionalem Intellisense! – snicker

+7

Ich verwendete einen ähnlichen Ansatz, um einen konfigurationsspezifischen Verweis auf Debug/Release-Versionen der Referenz zu erstellen. Ich habe nur auf die Release-Version gezeigt, als ich die Referenz hinzugefügt habe, und dann im Editor die 'Release' im Hint-Pfad mit' $ (Configuration) 'ersetzt habe, und voila - die Referenz wird automatisch auf die korrekte Zielkonfiguration aktualisiert! – awe

+3

@ awe: Es ist zulässig, das Attribut "Condition" auf die meisten Elemente in einer MSBuild-Datei zu setzen. – adrianbanks

9
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath> 
</Reference> 

Sie können den Hinweis Pfad mit den Eigenschaften ersetzen:

$ (Konfiguration) ist äquivalent Release/Debug oder was auch immer andere Konfiguration, die Sie haben. $ (Platform) entspricht x86/x64/Jede CPU

Wenn Ihre Konfiguration Jede CPU dann werden Sie einfache Anführungszeichen um $ (Konfiguration)

Auch beziehen sich auf die Bedingung Optionen verwiesen durch adrianbanks setzen müssen

+0

Danke, das funktionierte für mich, während die Lösung von @adrianbanks die Pakete beim Aufbauen nicht auflösen würde – HostMyBus

Verwandte Themen