Условные ссылки в проекте.NET, возможном избавиться от предупреждения?

У меня есть две ссылки на блок SQLite, один для 32-разрядного и один для 64-разрядного, который похож на это (это - тестовый проект попытаться избавиться от предупреждения, не становитесь одержимыми путями):

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

Это производит соблюдающее предупреждение:

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

Для меня действительно ли возможно избавиться от этого предупреждения?

Одним путем я посмотрел на него, чтобы просто настроить мой проект быть 32-разрядным, когда я разрабатываю и позволяю машине сборки зафиксировать ссылку при создании для 64-разрядного, но это кажется немного неловким и вероятно подверженным ошибкам.

Какие-либо другие опции?

Причина я хочу избавиться от него, состоит в том, что предупреждение, по-видимому, берется TeamCity и периодически отмечается как что-то, что я должен изучить, таким образом, я хотел бы быть полностью избавленным от него.


Править: На ответ я попробовал это:

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

и затем в моей ссылке:

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

Это избавилось от предупреждения, но это корректно?

22
задан angry person 6 April 2010 в 10:26
поделиться

2 ответа

Если для SQL Lite нет сборки AnyCPU, вы застряли с отдельными сборками.

Для выполнения отдельных сборок создайте свойство, которое задает правильный путь в группе условных свойств, а затем используйте это свойство, чтобы иметь единственную ссылку (т. Е. Переместить условное выражение за пределы группы элементов ссылок). Пример использования такого свойства (для пользовательского расширения FXCop) здесь , вы можете увидеть множество условных свойств, определенных в начале файла .csproj .

(Резюме: VS не поддерживает все возможности MSBuild.)

9
ответ дан 29 November 2019 в 05:55
поделиться

Насколько я понимаю, проблема с вашим исходным проектом заключалась в том, что у вас было True с указанием System.Data.SQLite, Version = 1.0.61.0 , тогда как фактическая сборка была версии 1.0.65. Исправление версии в имени сборки в Ссылке должно помочь.

1
ответ дан 29 November 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: