2010-04-06 31 views
19

Tôi có hai tham chiếu đến một hội SQLite, một cho 32-bit và một cho 64-bit, trông giống như thế này (đây là một dự án thử nghiệm để cố gắng loại bỏ các cảnh báo, không bị treo lên trên đường dẫn):Tham chiếu có điều kiện trong dự án .NET, có thể loại bỏ cảnh báo?

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

Điều này tạo ra những cảnh báo sau đây:

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

có thể cho tôi để thoát khỏi cảnh báo này? Một cách tôi đã xem xét nó để chỉ cần cấu hình dự án của tôi là 32-bit khi tôi phát triển, và để cho máy xây dựng sửa tham chiếu khi xây dựng cho 64-bit, nhưng điều này có vẻ hơi khó xử và có thể dễ bị lỗi.

Bất kỳ tùy chọn nào khác?

Lý do tôi muốn loại bỏ nó là cảnh báo rõ ràng đang được TeamCity chọn và định kỳ được gắn cờ là thứ tôi cần xem xét, vì vậy tôi muốn loại bỏ hoàn toàn.


Sửa: mỗi câu trả lời, tôi đã cố gắng này:

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

và sau đó trong tài liệu tham khảo của tôi:

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

này đã thoát khỏi những cảnh báo, nhưng nó đúng ?

Trả lời

8

Nếu không có lắp ráp "AnyCPU" cho SQL Lite, bạn đang mắc kẹt với các bản dựng riêng biệt.

Để thực hiện các bản dựng riêng, hãy tạo thuộc tính cung cấp đường dẫn chính xác trong nhóm thuộc tính có điều kiện và sau đó sử dụng thuộc tính đó để có một tham chiếu đơn lẻ (tức là di chuyển điều kiện bên ngoài nhóm mục tham chiếu). Có một ví dụ về việc sử dụng một thuộc tính như vậy (cho một phần mở rộng FXCop tùy chỉnh) here, bạn có thể thấy nhiều thuộc tính có điều kiện được định nghĩa ở đầu tệp .csproj.

(Tóm tắt:. VS không xử lý tất cả các khả năng MSBuild không)

+0

Tôi đã chỉnh sửa câu trả lời của mình với những gì tôi nghĩ là chính xác, bạn có thể nhìn vào nó và cho tôi biết nếu đó là ý của bạn? –

+0

@Lasse: Điều đó có vẻ đúng. – Richard

1

Như tôi đã nhìn thấy nó, vấn đề với dự án ban đầu của bạn là bạn phải xác định <SpecificVersion>True</SpecificVersion>System.Data.SQLite, Version=1.0.61.0, trong khi lắp ráp thực tế là phiên bản 1.0 .65. Sửa phiên bản trong tên lắp ráp theo số Reference cần được trợ giúp.

+0

Hmm, bạn có một điểm, mặc dù nó tạo ra một cảnh báo cho cả x86 và x64 mặc dù, và một trong số họ là rõ ràng là chính xác. Tôi sẽ xem xét nó. –

+0

Dường như tôi gặp sự cố với tệp, tệp thực sự là 1.0.61 trong trường hợp đó. Tham chiếu đã được thêm thủ công thông qua Visual Studio và do đó phải chính xác. Tôi sẽ sửa chữa các tập tin, nhưng đó không phải là thủ phạm cho các cảnh báo. –

+0

Hai đề xuất khác - putt 'Điều kiện' trên' ItemGroup', không phải trên 'Tham chiếu'; thử đường dẫn tuyệt đối. –

Các vấn đề liên quan