2009-09-29 7 views
19

Env .: VS2008 C# projetProjet Visual Studio: comment inclure une référence pour une seule configuration?

Je dois créer mon application pour une utilisation dans 2 environnements différents. Dans l'un de ces environnements, j'ai besoin d'utiliser un assemblage DLL tiers.

Je pourrais isoler le code qui utilise cette DLL en utilisant #if blocks. Mais comment puis-je conditionnellement inclure la référence à la DLL dans le fichier de projet CS?

Editer: womp a un bon point dans son commentaire. Je suis devenu separate question: Est-ce que la DLL référencée sera chargée du tout si elle n'est jamais appelée? TIA,

+2

Pourquoi ne pas le laisser dans les deux, faire l'utilisation de la configuration de la DLL, et éviter de compliquer les choses? Les DLL ne sont pas chargées, sauf si nécessaire. Y a-t-il des problèmes de licence avec la DLL tierce? – womp

+0

womp, très bonne question en fait. (Je ne distribue pas la DLL tierce, elle est installée sur certains systèmes par le fabricant). –

Répondre

24

Décharger le projet et l'ouvrir comme .XML

Recherchez la balise de l'élément de référence et ajouter un attribut de condition.

Par exemple:

<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> 

Notez la dernière référence a maintenant une condition.

+2

C'était aussi ma pensée, alors j'ai essayé. Dans mon cas, cela a causé l'échec de la référence dans toutes les configurations (le système a agi comme s'il ne pouvait pas trouver l'assemblage). –

+2

Ouais le problème est, l'EDI ignore les choses avec des conditions et dans ce cas, il en a besoin pour toutes sortes de raisons (IntelliSense, navigateur d'objet ...) donc il se plaindra. En outre, vous devrez conditionner les appels à cet assembly, sinon le compilateur ne pourra pas trouver l'assembly auquel le code se réfère. – Coincoin

1

Ce qui suit, dans les références de fichier csproj ItemGroup travaille en contre 2008 pour moi: -

<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

Vous pouvez simplifier cela en ajoutant simplement la variable '$ (Configuration)' directement dans le HintPath: ' Faux .. \ .. \ .. \ .. \ Bibliothèque d'utilisateurs de Visual Studio \ $ (Configuration) \ DRLClasses.dll ' – awe

2

Je sais que c'est un ancien poste, mais au cas où quelqu'un d'autre trouve avant de trouver la réponse, comme Je l'ai fait, il est ceci, vous devez utiliser le « Choisissez » élément dans le dossier du projet:

link

vous pouvez définir les références conditionnelles et la compilation conditionnelle dans un seul endroit, de sorte que vous ne devez pas utiliser # si c'est dans votre code.

Cela fonctionne dans SharpDevelop, et puisque c'est la documentation MS, je suppose que cela fonctionne dans Visual Studio.

Questions connexes