2009-11-23 5 views
46

Ho un progetto che aggiunge un po 'di estensibilità a un'altra applicazione tramite la loro API. Tuttavia, voglio essere in grado di utilizzare lo stesso progetto per più versioni della loro applicazione, perché la maggior parte del codice è la stessa.Esiste un modo per specificare riferimenti di assembly basati sulla configurazione di build in Visual Studio?

Tuttavia, ogni versione dell'applicazione richiede un riferimento all'assembly corretto per quella versione del software. Caricano i loro assembly nel GAC, quindi anche se potessi specificare la versione da utilizzare in base alla configurazione di build, andrebbe bene. C'è un modo per farlo all'interno del VS o ho bisogno di uno strumento di compilazione esterno?

risposta

54

C'è un modo per farlo, ma dovrete modificare manualmente i file di progetto. I file di progetto possono avere un attributo Condition ad essi applicato in molti elementi, incluso quello per i riferimenti.

È possibile aggiungere questi per i vostri riferimenti per specificare quando deve essere usato il riferimento:

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

quindi definire diverse configurazioni di build (V1, V2, V3) e ogni riferimento saranno inclusi solo nel relativo configurazione di costruzione scelta.

Combina questo con i simboli di compilazione condizionale e le dichiarazioni #if nel codice e dovresti riuscire a fare ciò che desideri.

Una cosa da fare attenzione se si esegue questa operazione è che è facile che Visual Studio rimuova gli attributi condizionali dal file di progetto.

+0

Questo ha funzionato perfettamente, tonnellate di complimenti. Anche Visual Studio funziona bene finché non gioco con quei riferimenti, incluso Intellisense funzionale! – snicker

+7

Ho usato un approccio simile per fare un riferimento specifico di configurazione alle versioni di debug/release del riferimento. Ho appena indicato la versione di rilascio quando ho aggiunto il riferimento, e poi nel Blocco note, sostituito 'Rilascio' nel percorso di suggerimento con' $ (Configurazione) ', e voila - il riferimento si aggiorna automaticamente alla corretta configurazione di destinazione! – awe

+3

@awe: È valido inserire l'attributo 'Condizioni' sulla maggior parte degli elementi in un file MSBuild. – 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> 

È possibile sostituire il percorso suggerimento con le proprietà:

$ (configurazione) è equivalente a rilasciare/Debug o qualunque altra configurazione che avete. $ (Platform) è equivalente a x86/x64/Qualsiasi CPU

Se la configurazione comprende Qualsiasi CPU allora si avrà bisogno di mettere le virgolette singole intorno $ (Configuration)

Consultare anche le opzioni di condizione a cui fa riferimento adrianbanks

+0

Grazie per aver funzionato, mentre la soluzione di @adrianbanks non risolveva i pacchetti durante il tentativo di creare – HostMyBus