У меня есть две ссылки на блок 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>
Это избавилось от предупреждения, но это корректно?
Если для SQL Lite нет сборки AnyCPU, вы застряли с отдельными сборками.
Для выполнения отдельных сборок создайте свойство, которое задает правильный путь в группе условных свойств, а затем используйте это свойство, чтобы иметь единственную ссылку (т. Е. Переместить условное выражение за пределы группы элементов ссылок). Пример использования такого свойства (для пользовательского расширения FXCop) здесь , вы можете увидеть множество условных свойств, определенных в начале файла .csproj
.
(Резюме: VS не поддерживает все возможности MSBuild.)
Насколько я понимаю, проблема с вашим исходным проектом заключалась в том, что у вас было
с указанием System.Data.SQLite, Version = 1.0.61.0
, тогда как фактическая сборка была версии 1.0.65. Исправление версии в имени сборки в Ссылке
должно помочь.