2009-09-29 4 views
19

Env .: VS2008 C# ProjektVisual Studio-Projekt: Wie kann eine Referenz nur für eine Konfiguration eingefügt werden?

Ich brauche meine App für den Einsatz in 2 verschiedenen Umgebungen zu bauen. In einer dieser Umgebungen muss ich eine DLL-Assembly eines Drittanbieters verwenden.

Ich konnte den Code, der diese DLL verwendet, mit #if Blöcke isolieren. Wie aber schließe ich den Verweis auf die DLL in der CS-Projektdatei bedingt ein?

Edit: Womp hat einen guten Punkt in seinem Kommentar. Ich verwandelte mich in eine separate question: Wird die referenzierte DLL überhaupt geladen, wenn sie nie aufgerufen wird? TIA,

+2

Warum sollten Sie es nicht einfach in beiden lassen, machen Sie die Verwendung der DLL-Konfiguration basieren, und vermeiden Sie Komplikationen? DLLs werden nicht geladen, es sei denn, sie sind erforderlich. Gibt es Lizenzprobleme mit der Drittanbieter-DLL? – womp

+0

Womp, sehr gute Frage eigentlich. (Ich vertreibe die 3rd Party DLL nicht. Sie ist auf einigen Systemen vom Hersteller installiert). –

Antwort

24

Unload das Projekt und öffnen Sie sie als .XML

den Tag-Referenzpunkt liegen und eine Bedingung Attribut hinzufügen.

Zum Beispiel:

<ItemGroup> 
    <Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
    </Reference> 
    <Reference Include="System.Data" /> 
    <Reference Include="System.Drawing" /> 
    <Reference Include="System.Xml" /> 

    <Reference Include="MyUtilities.Debug" 
    Condition="'$(Configuration)'=='Debug'"/> 

</ItemGroup> 

Beachten Sie die letzte Referenz hat jetzt eine Bedingung.

+2

Das war auch mein Gedanke, also habe ich es versucht. In meinem Fall hat dies dazu geführt, dass die Referenz in der gesamten Konfiguration fehlgeschlagen ist (das System hat so getan, als könnte es die Assembly nicht finden). –

+2

Ja, das Problem ist, die IDE ignoriert Dinge mit Bedingungen und in diesem Fall braucht sie es aus allen möglichen Gründen (Intellisense, Objektbrowser ...), so dass es sich beschweren wird. Außerdem müssen Sie die Aufrufe für diese Assembly bedingungsabhängig machen, andernfalls kann der Compiler die Assembly nicht finden, auf die der Code verweist. – Coincoin

1

Die folgende, in dem csproj Dateiverweis ItemGroup für mich vs 2008 arbeitet in: -

<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Debug' "> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\Visual Studio User Library\Debug\DRLClasses.dll</HintPath> 
</Reference> 
<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Release' "> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\Visual Studio User Library\Release\DRLClasses.dll</HintPath> 
</Reference> 
+4

Sie können dies vereinfachen, indem Sie die '$ (Configuration)' - Variable direkt im HintPath hinzufügen: ' False .. \ .. \ .. \ .. \ Visual Studio Benutzerbibliothek \ $ (Konfiguration) \ DRLClasses.dll ' – awe

2

Ich weiß, dass dies eine alte Post, aber falls jemand anderes findet sie, bevor sie die Antwort zu finden, wie ich tat, es ist dies: Sie „wählen Sie“ Element in der Projektdatei verwenden müssen:

link

definieren Sie können sowohl bedingte Referenzen und bedingte Kompilierung in einem Ort, so dass Sie sich nicht verwenden # wenn in deinem Code ist.

Es funktioniert in SharpDevelop, und da es MS-Dokumentation ist, nehme ich an, dass es in Visual Studio funktioniert.

Verwandte Themen