2010-04-06 16 views
19

Tengo dos referencias a un ensamblaje SQLite, uno para 32 bits y otro para 64 bits, que se ve así (este es un proyecto de prueba para tratar de deshacerse de la advertencia, no se cuelgue en el caminos):Referencias condicionales en el proyecto .NET, ¿es posible eliminar la advertencia?

<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 que me deshaga de esta advertencia?

Una forma en que lo he mirado para configurar mi proyecto para ser de 32 bits cuando desarrollo, y dejar que la máquina de compilación arregle la referencia cuando compila 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 ella es que la advertencia aparentemente está siendo recogida por TeamCity y marcada periódicamente como algo que necesito investigar, por lo que me gustaría deshacerme completamente de ella.


Editar: 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 se deshizo de la advertencia, pero ¿es correcto ?

Respuesta

8

Si no hay un ensamblado "AnyCPU" para SQL Lite, se bloquea la construcción por separado.

Para hacer compilaciones separadas, cree una propiedad que proporcione la ruta correcta en un grupo de propiedades condicional y luego use esa propiedad para tener una sola referencia (es decir, mover el condicional fuera del grupo de elementos de referencias). Hay un ejemplo de uso de dicha propiedad (para una extensión de FXCop personalizada) here, puede ver muchas propiedades condicionales definidas al comienzo del archivo .csproj.

(Resumen:. VS no maneja todas las posibilidades de MSBuild hace)

+0

He editado mi respuesta con lo que creo que es correcto, ¿puedes mirarlo y decirme si eso es lo que querías decir? –

+0

@Lasse: Eso parece ser correcto. – Richard

1

Como yo lo veo, el problema con su proyecto original era que había <SpecificVersion>True</SpecificVersion> especificando System.Data.SQLite, Version=1.0.61.0, mientras que el conjunto real fue la versión 1.0 .sesenta y cinco. La reparación de la versión en el nombre del ensamblado en Reference debe ayudar.

+0

Hmm, tiene sentido, aunque genera una advertencia tanto para x86 como para x64, y una de ellas es aparentemente correcta. Lo miraré. –

+0

Aparentemente tengo un problema con los archivos, el archivo era en realidad 1.0.61 en ese caso. La referencia se ha agregado manualmente a través de Visual Studio y, por lo tanto, debería ser correcta. Aunque arreglaré los archivos, pero ese no fue el culpable de las advertencias. –

+0

Dos sugerencias más: putt 'Condition' en' ItemGroup', no en 'Reference'; prueba caminos absolutos. –

Cuestiones relacionadas