2010-04-06 12 views
19

Bir SQLite derlemesinde, biri 32 bit ve 64 bit için bir tane var. Buna benziyor (bu uyarıdan kurtulmaya çalışan bir test projesidir, yolları):.NET projesinde koşullu referanslar, uyarılardan kurtulmak mümkün mü?

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

Bu aşağıdaki uyarıyı üretir: beni bu uyarı kurtulmak için

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

mümkün müdür?

Tek bir şekilde geliştirdiğimde projemi 32-bit olarak yapılandırmak için baktım ve 64-bit inşa ederken yapı makinesinin referansı düzeltmesine izin verdim, ancak bu biraz garip ve muhtemelen eğilimli görünüyor hatalara

Diğer seçenekler?

Bundan kurtulmak istediğim, uyarının görünüşe göre TeamCity tarafından algılandığı ve periyodik olarak bakmam gereken bir şey olarak işaretlendiğidir, bu yüzden tamamen kurtulmak istiyorum.


Düzenleme: cevap Per, bu çalıştı:

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

ve sonra benim referans:

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

Bu uyarı kurtuldum ama doğruysa ?

cevap

8

SQL Lite için "AnyCPU" aksamı yoksa, ayrı yapılarla takılırsınız.

Yapıları ayrı yapmak için koşullu özellik grubunda doğru yolu veren bir özellik oluşturun ve ardından bu özelliği tek bir başvuruya sahip olması için kullanın (örn. Koşullu öğeyi başvuru öğeleri grubunun dışına taşıyın). Böyle bir özelliği (özel bir FXCop uzantısı için) here kullanmanın bir örneği vardır, .csproj dosyasının başlangıcında tanımlanmış bir çok koşullu özellik görebilirsiniz.

(Özet:. VS MSBuild yaptığı tüm imkânlarını işleyemez)

+0

Cevabımı, doğru olduğunu düşündüğüm şekilde düzenledim, bakabilir misiniz ve bunun ne anlama geldiğini söyler misiniz? –

+0

@Lasse: Doğru görünüyor. – Richard

1

Gördüğüm kadarıyla, orijinal proje ile sorun gerçek montaj sürüm 1.0 iken <SpecificVersion>True</SpecificVersion>, System.Data.SQLite, Version=1.0.61.0 belirterek vardı 0,65. Montaj isminde Reference numaralı sabitleme versiyonunun yardım etmesi gerekiyor.

+0

Hmm, bir nokta var, ancak hem x86 hem de x64 için bir uyarı oluştursa da ve bunlardan biri görünüşte doğru. Ben ona bakacağım. –

+0

Görünüşe göre dosyaları ile ilgili bir sorunum var, dosya aslında bu durumda 1.0.61 idi. Referans Visual Studio ile manuel olarak eklenmiştir ve bu yüzden doğru olmalıdır. Dosyaları tamir edeceğim, ama bu uyarıların suçu değildi. –

+0

İki tane daha öneri - putt 'Durum' 'Item'Grup'da değil, 'Reference'ın kendisi üzerinde; Mutlak yolları deneyin. –