2009-11-23 13 views
46

Tengo un proyecto que agrega cierta extensibilidad a otra aplicación a través de su API. Sin embargo, quiero poder utilizar el mismo proyecto para múltiples versiones de su aplicación, porque la mayoría del código es el mismo.¿Hay alguna manera de especificar referencias de ensamblado basadas en la configuración de compilación en Visual Studio?

Sin embargo, cada versión de la aplicación requiere una referencia al ensamblaje adecuado para esa versión del software. Cargan sus ensamblajes en el GAC, por lo que incluso si pudiera especificar el versión del ensamblaje para utilizarlo según la configuración de compilación, estaría bien. ¿Hay alguna manera de hacer esto desde dentro de VS o necesito una herramienta de compilación externa?

Respuesta

54

Hay una forma de hacerlo, pero tendrá que editar manualmente los archivos de su proyecto. Los archivos de proyecto pueden tener un atributo Condition aplicado a ellos en muchos de los elementos, incluido el de referencias.

Puede añadir estos a sus referencias para especificar cuándo se debe utilizar la referencia:

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'"> 
</Reference> 
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'"> 
</Reference> 
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'"> 
</Reference> 

A continuación se define varias configuraciones de construcción (V1, V2, V3) y cada referencia tan sólo se incluirá en el correspondiente configuración de compilación elegida.

Combine esto con los símbolos de compilación condicional y las declaraciones #if en su código y debería poder hacer lo que desee.

Algo a tener en cuenta si haces esto es que es fácil que Visual Studio elimine los atributos condicionales del archivo de proyecto.

+0

Esto funcionó perfectamente, toneladas de felicitaciones. Incluso Visual Studio funciona muy bien siempre que no juegue con esas referencias, ¡incluyendo Intellisense funcional! – snicker

+7

Utilicé un enfoque similar para hacer una referencia específica de configuración a las versiones de Debug/Release de la referencia. Solo apunté a la versión de lanzamiento cuando agregué la referencia, y luego en el Bloc de notas, reemplacé 'Release' en la ruta de la pista con' $ (Configuración) ', y listo: la referencia se actualiza automáticamente a la configuración de destino correcta. – awe

+3

@awe: es válido para poner el atributo 'Condition' en la mayoría de los elementos en un archivo MSBuild. – adrianbanks

9
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath> 
</Reference> 

Puede sustituir la ruta indirecta con las propiedades:

$ (configuración) es equivalente a la salida/de depuración o cualquier otra configuración que tiene. $ (plataforma) es equivalente a x86/x64/Cualquier CPU

Si su configuración incluye cualquier CPU, entonces tendrá que poner comillas simples alrededor de $ (Configuración)

Consulte también las opciones de condición referenciados por adrianbanks

+0

Gracias, esto funcionó para mí, mientras que la solución de @adrianbanks no resolvería los paquetes al intentar construir – HostMyBus

Cuestiones relacionadas