2010-04-06 5 views
19

Ich habe zwei Verweise auf eine SQLite-Assembly, eine für 32-Bit und eine für 64-Bit, die so aussieht (dies ist ein Testprojekt, um die Warnung loszuwerden, nicht auf den hängen Pfade):Bedingte Verweise in .NET-Projekt, möglich Warnung loswerden?

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

das folgende Warnung erzeugt:

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

Ist es möglich für mich, diese Warnung loswerden?

Eine Möglichkeit, wie ich mein Projekt als 32-Bit konfigurieren kann, wenn ich es entwickle, und die Build-Maschine die Referenz beim Erstellen für 64-Bit reparieren lassen, aber das scheint ein wenig peinlich und wahrscheinlich anfällig zu Fehlern.

Weitere Optionen?

Der Grund, warum ich es loswerden möchte, ist, dass die Warnung von TeamCity anscheinend aufgegriffen und regelmäßig als etwas markiert wird, das ich untersuchen muss, also möchte ich es komplett loswerden.


bearbeiten: Pro die Antwort, habe ich versucht, dies:

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

und dann in meiner Referenz:

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

Dies wurde von der Warnung los zu werden, aber ist es richtig ?

Antwort

8

Wenn es keine "AnyCPU" Assembly für SQL Lite gibt, sind Sie mit separaten Builds stecken.

Um separate Builds zu erstellen, erstellen Sie eine Eigenschaft, die den richtigen Pfad in einer bedingten Eigenschaftsgruppe angibt, und verwenden Sie dann diese Eigenschaft, um eine einzelne Referenz zu haben (d. H. Die Bedingung außerhalb der Referenzelementgruppe verschieben). Es gibt ein Beispiel für die Verwendung einer solchen Eigenschaft (für eine benutzerdefinierte FXCop-Erweiterung) here, Sie können viele bedingte Eigenschaften am Anfang der Datei .csproj definiert sehen.

(Zusammenfassung:. VS behandelt nicht alle Möglichkeiten MSBuild tut)

+0

Ich habe meine Antwort mit dem bearbeitet, was ich für richtig halte. Kannst du es dir anschauen und mir sagen, ob das das war, was du meintest? –

+0

@Lasse: Das scheint richtig zu sein. – Richard

1

Wie ich es sehe, war das Problem mit Ihrem ursprünglichen Projekt, dass Sie <SpecificVersion>True</SpecificVersion>System.Data.SQLite, Version=1.0.61.0 Angabe hatte, während die eigentliche Montage Version war 1.0 .65. Fix Version in der Assemblyname in Reference sollte helfen.

+0

Hmm, Sie haben einen Punkt, obwohl es eine Warnung sowohl für x86 als auch für x64 generiert, und eine davon ist offensichtlich korrekt. Ich werde es mir ansehen. –

+0

Anscheinend habe ich ein Problem mit den Dateien, die Datei war in diesem Fall 1.0.61. Die Referenz wurde manuell über Visual Studio hinzugefügt und sollte daher korrekt sein. Ich werde die Dateien zwar reparieren, aber das war nicht der Schuldige für die Warnungen. –

+0

Zwei weitere Vorschläge - Putt 'Condition' auf der' ItemGroup', nicht auf 'Reference' selbst; Versuche absolute Pfade. –

Verwandte Themen