else - tag debug c#
Referencias condicionales en proyecto.NET, ¿es posible deshacerse de la advertencia? (2)
Como lo veo, el problema con su proyecto original fue que tenía <SpecificVersion>True</SpecificVersion>
especificando System.Data.SQLite, Version=1.0.61.0
, mientras que el ensamblaje real era la versión 1.0.65. Arreglar la versión en el nombre del ensamblaje en Reference
debería ayudar.
Tengo dos referencias a un ensamblaje de SQLite, una para 32 bits y otra para 64 bits, que se parece a esto (este es un proyecto de prueba para intentar deshacerme de la advertencia, no te cuelgues de las rutas) :
<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>
Esto produce la siguiente advertencia:
Warning 1 The referenced component ''System.Data.SQLite'' could not be found.
¿Es posible para mí deshacerme de esta advertencia?
Una forma la he visto para configurar mi proyecto para que sea de 32 bits cuando desarrollo, y dejar que la máquina de compilación corrija la referencia cuando se construye para 64 bits, pero esto parece un poco incómodo y probablemente propenso a errores.
¿Alguna otra opción?
La razón por la que quiero deshacerme de él es que TeamCity aparentemente ha captado la advertencia y se ha marcado periódicamente como algo que necesito analizar, por lo que me gustaría deshacerme de él.
Edit : Por la respuesta, he intentado esto:
<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>
y luego en mi referencia:
<Reference Include="System.Data.SQLite">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(SqlitePath)/System.Data.SQLite.DLL</HintPath>
</Reference>
Esto eliminó la advertencia, pero ¿es correcto?
Si no hay un ensamblaje "AnyCPU" para SQL Lite, se queda atascado con compilaciones separadas.
Para hacer construcciones separadas, cree una propiedad que proporcione la ruta correcta en un grupo de propiedades condicionales y luego use esa propiedad para tener una sola referencia (es decir, mueva el condicional fuera del grupo de elementos de referencias). Aquí hay un ejemplo del uso de dicha propiedad (para una extensión FXCop personalizada), puede ver muchas propiedades condicionales que se definen al inicio del archivo .csproj
.
(Resumen: VS no maneja todas las posibilidades que hace MSBuild).