2010-04-06 15 views
19

J'ai deux références à un assembly SQLite, un pour 32 bits et un pour 64 bits, qui ressemble à ceci (c'est un projet de test pour essayer de se débarrasser de l'avertissement, ne vous accrochez pas sur le chemins):Références conditionnelles dans le projet .NET, possible de se débarrasser de l'avertissement?

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

ce produit l'avertissement suivant:

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

Est-il possible pour moi de me débarrasser de cet avertissement? D'une manière que je l'ai regardé pour simplement configurer mon projet pour être 32 bits quand je développe, et laisser la machine de construction fixer la référence en construisant pour 64-bit, mais ceci semble un peu maladroit et probablement enclin aux erreurs.

D'autres options?

La raison pour laquelle je veux me débarrasser de cela est que l'avertissement est apparemment pris en charge par TeamCity et périodiquement signalé comme quelque chose que je dois examiner, donc je voudrais m'en débarrasser complètement.


Modifier: Par la réponse, j'ai essayé ceci:

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

puis dans ma référence:

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

C'est débarrassé de l'avertissement, mais est-il correct ?

Répondre

8

S'il n'existe aucun assembly "AnyCPU" pour SQL Lite, vous êtes bloqué avec des générations distinctes. Pour créer des générations séparées, créez une propriété qui donne le chemin correct dans un groupe de propriétés conditionnelles, puis utilisez cette propriété pour avoir une référence unique (c'est-à-dire déplacez le conditionnel en dehors du groupe d'éléments de références). Il existe un exemple d'utilisation d'une telle propriété (pour une extension FXCop personnalisée). here, vous pouvez voir beaucoup de propriétés conditionnelles définies au début du fichier .csproj.

(Résumé:. VS ne gère pas toutes les possibilités MSBuild fait)

+0

J'ai édité ma réponse avec ce que je pense être correct, pouvez-vous le regarder et me dire si c'est ce que vous vouliez dire? –

+0

@Lasse: Cela semble être correct. – Richard

1

Comme je le vois, le problème avec votre projet initial était que vous aviez <SpecificVersion>True</SpecificVersion>System.Data.SQLite, Version=1.0.61.0 spécifiant, alors que l'assemblage proprement dit était la version 1.0 .65. La version de fixation dans le nom d'assembly dans Reference devrait aider.

+0

Hmm, vous avez un point, bien qu'il génère un avertissement à la fois pour x86 et x64, et l'un d'eux est apparemment correct. Je vais regarder dedans. –

+0

Apparemment, j'ai un problème avec les fichiers, le fichier était en réalité 1.0.61 dans ce cas. La référence a été ajoutée manuellement via Visual Studio et doit donc être correcte. Je vais corriger les fichiers, mais ce n'était pas le coupable pour les avertissements. –

+0

Deux autres suggestions - putt 'Condition' sur' ItemGroup', pas sur 'Reference' lui-même; essayez des chemins absolus. –