2009-09-29 9 views
19

Env .: progetto VS2008 C#Progetto Visual Studio: come includere un riferimento per una sola configurazione?

Ho bisogno di costruire la mia app per l'utilizzo in 2 ambienti diversi. In uno di questi ambienti, ho bisogno di utilizzare un assembly DLL di terze parti.

Posso isolare il codice che utilizza questa DLL utilizzando i blocchi #if. Ma come faccio a includere in modo condizionale il riferimento alla DLL nel file di progetto CS?

Modifica: womp ha un buon punto nel suo commento. Ho trasformato in un separate question: La DLL di riferimento verrà caricata del tutto se non viene mai chiamata? TIA,

+2

Perché non dovresti semplicemente lasciarlo in entrambi, rendere l'utilizzo della configurazione della DLL basata ed evitare di complicare le cose? Le DLL non vengono caricate se non necessario. Ci sono problemi di licenza con la dll di terze parti? – womp

+0

womp, davvero una bella domanda. (Non distribuisco la DLL di terze parti. È installata su alcuni sistemi dal produttore). –

risposta

24

Scaricare il progetto e aprirlo come .XML

Individuare il tag elemento di riferimento e aggiungere un attributo Condition.

Per esempio:

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

Avviso l'ultimo riferimento ora ha una condizione.

+2

Anche questo è stato il mio pensiero, quindi l'ho provato. Nel mio caso questo ha causato il fallimento del riferimento in tutte le configurazioni (il sistema ha funzionato come se non fosse in grado di trovare l'assembly). –

+2

Sì, il problema è che l'IDE ignora le cose con le condizioni e in tal caso ne ha bisogno per ogni tipo di motivo (intellisense, browser degli oggetti ...) quindi si lamenterà. Inoltre, dovrai effettuare le chiamate a quell'assembly condizionale, altrimenti il ​​compilatore non sarà in grado di trovare l'assembly a cui fa riferimento il codice. – Coincoin

1

Di seguito, nei riferimenti ai file csproj ItemGroup lavora in vs 2008 per me: -

<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

È possibile semplificare questo aggiungendo semplicemente la variabile '$ (Configuration)' direttamente in HintPath: ' False .. \ .. \ .. \ .. \ Libreria utente di Visual Studio \ $ (Configurazione) \ DRLClasses.dll ' – awe

2

So che questo è un vecchio post, ma nel caso in cui nessun altro lo trova prima di trovare la risposta, come l'ho fatto, è questo: è necessario utilizzare l'elemento "Scegliere" nel file di progetto:

link

è possibile definire entrambi i riferimenti condizionali e la compilazione condizionale in un unico luogo, in modo da non dover utilizzare # se è nel tuo codice.

Funziona in SharpDevelop e, poiché è la documentazione di MS, presumo che funzioni in Visual Studio.