2010-04-06 15 views
19

Ho due riferimenti a un assembly SQLite, uno per 32 bit e uno per 64 bit, che appare come questo (questo è un progetto di prova per provare a sbarazzarsi dell'avvertimento, non rimanere appeso al percorsi):Riferimenti condizionali nel progetto .NET, è possibile eliminare avvisi?

<Reference Condition=" '$(Platform)' == 'x64' " Include="System.Data.SQLite, Version=1.0.61.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64"> 
    <SpecificVersion>True</SpecificVersion> 
    <HintPath>..\..\LVK Libraries\SQLite3\version_1.0.65.0\64-bit\System.Data.SQLite.DLL</HintPath> 
</Reference> 
<Reference Condition=" '$(Platform)' == 'x86' " Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86"> 
    <SpecificVersion>True</SpecificVersion> 
    <HintPath>..\..\LVK Libraries\SQLite3\version_1.0.65.0\32-bit\System.Data.SQLite.DLL</HintPath> 
</Reference> 

questo produce il seguente avviso:

Warning 1 The referenced component 'System.Data.SQLite' could not be found.  

E 'possibile per me, per sbarazzarsi di questo avviso?

Un modo ho guardato per configurare solo il mio progetto sia a 32-bit quando sviluppo, e lasciare che il sistema di compilazione fissare il riferimento quando si costruisce a 64 bit, ma questo sembra un po 'scomodo e probabilmente inclini agli errori.

Altre opzioni?

Il motivo per cui voglio sbarazzarmene è che l'avviso sembra essere stato raccolto da TeamCity e periodicamente contrassegnato come qualcosa che devo esaminare, quindi mi piacerebbe liberarmene completamente.


Edit: Per la risposta, ho provato questo:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    ... 
    <SqlitePath>..\..\LVK Libraries\SQLite3\version_1.0.65.0\32-bit</SqlitePath> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> 
    ... 
    <SqlitePath>..\..\LVK Libraries\SQLite3\version_1.0.65.0\32-bit</SqlitePath> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> 
    ... 
    <SqlitePath>..\..\LVK Libraries\SQLite3\version_1.0.65.0\64-bit</SqlitePath> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> 
    ... 
    <SqlitePath>..\..\LVK Libraries\SQLite3\version_1.0.65.0\64-bit</SqlitePath> 
</PropertyGroup> 

e poi nel mio riferimento:

<Reference Include="System.Data.SQLite"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>$(SqlitePath)\System.Data.SQLite.DLL</HintPath> 
</Reference> 

Questa è sbarazzato di avvertimento, ma è corretto ?

risposta

8

Se non esiste un assembly "AnyCPU" per SQL Lite, si è bloccati con build separati.

Per creare build separati creare una proprietà che fornisca il percorso corretto in un gruppo di proprietà condizionale e quindi utilizzare tale proprietà per avere un riferimento singolo (ad esempio spostare il condizionale al di fuori del gruppo di articoli di riferimento). C'è un esempio di utilizzo di tale proprietà (per un'estensione FXCop personalizzata) here, è possibile vedere molte proprietà condizionali definite all'inizio del file .csproj.

(Riassunto:. VS non gestisce tutte le possibilità MSBuild fa)

+0

Ho modificato la mia risposta con quello che penso sia corretto, puoi guardarlo e dirmi se era questo che intendevi? –

+0

@Lasse: sembra corretto. – Richard

1

come la vedo io, il problema con il progetto originale era che si doveva <SpecificVersion>True</SpecificVersion> Precisando System.Data.SQLite, Version=1.0.61.0, considerando che l'Assemblea reale era la versione 1.0 .65. La versione di correzione nel nome dell'assembly in Reference dovrebbe essere d'aiuto.

+0

Hmm, hai un punto, anche se genera un avvertimento per entrambi x86 e x64, e uno di questi è apparentemente corretto. Lo esaminerò. –

+0

Apparentemente ho un problema con i file, il file in realtà era 1.0.61 in quel caso. Il riferimento era stato aggiunto manualmente tramite Visual Studio e quindi dovrebbe essere corretto. Risolverò comunque i file, ma non era questo il colpevole degli avvertimenti. –

+0

Altri due suggerimenti - putt 'Condition' su' ItemGroup', non su 'Reference' stesso; prova percorsi assoluti. –

Problemi correlati