2009-09-29 9 views
19

Env .: VS2008 C# projectProyecto de Visual Studio: ¿cómo incluir una referencia para una sola configuración?

Necesito crear mi aplicación para utilizarla en 2 entornos diferentes. En uno de esos entornos, necesito usar un ensamblado DLL de un tercero.

Pude aislar el código que usa esta DLL usando #if bloques. Pero, ¿cómo incluyo condicionalmente la referencia a la DLL en el archivo de proyecto CS?

Editar: womp tiene un buen punto en su comentario. Convertí en un separate question: ¿Se cargará la DLL referenciada si nunca se llama? TIA,

+2

¿Por qué no le basta con dejarlo en tanto, hacer que el uso de la configuración basada DLL, y no complicar las cosas? Las DLL no se cargan a menos que sea necesario. ¿Hay problemas de licencia con el DLL de terceros? – womp

+0

womp, muy buena pregunta en realidad. (No distribuyo la DLL de terceros. Está instalada en algunos sistemas por el fabricante). –

Respuesta

24

de descarga del proyecto y abrirlo como .XML

Busque la etiqueta de elemento de referencia y añadir un atributo Estado.

Por ejemplo:

<ItemGroup> 
    <Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
    </Reference> 
    <Reference Include="System.Data" /> 
    <Reference Include="System.Drawing" /> 
    <Reference Include="System.Xml" /> 

    <Reference Include="MyUtilities.Debug" 
    Condition="'$(Configuration)'=='Debug'"/> 

</ItemGroup> 

Aviso la última referencia ahora tiene una condición.

+2

Esa fue mi idea también, así que lo intenté. En mi caso, eso hizo que la referencia fallara en todas las configuraciones (el sistema actuó como si no pudiera encontrar el ensamblaje). –

+2

Sí, el problema es que el IDE ignora las cosas con las condiciones y en ese caso, lo necesita por todo tipo de razones (intellisense, buscador de objetos ...) por lo que se quejará. Además, deberá realizar las llamadas a dicho ensamblado condicional, de lo contrario, el compilador no podrá encontrar el ensamblaje al que hace referencia el código. – Coincoin

1

El siguiente, en las referencias de archivo csproj ItemGroup trabaja en VS 2008 para mí: -

<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Debug' "> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\Visual Studio User Library\Debug\DRLClasses.dll</HintPath> 
</Reference> 
<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Release' "> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\..\..\Visual Studio User Library\Release\DRLClasses.dll</HintPath> 
</Reference> 
+4

Puede simplificar esto simplemente agregando la variable '$ (Configuración)' directamente en HintPath: ' False .. \ .. \ .. \ .. \ Biblioteca de usuario de Visual Studio \ $ (Configuración) \ DRLClasses.dll ' – awe

2

Sé que esto es una entrada antigua, pero en caso de cualquier otra persona lo encuentra antes de encontrar la respuesta, al igual lo hice, es la siguiente: es necesario utilizar el elemento "Seleccionar" en el archivo de proyecto:

link

se pueden definir dos referencias condicionales y la compilación condicional en un solo lugar, por lo que no tiene que utilizar # si está en tu código.

Funciona en SharpDevelop, y como es la documentación de MS, asumo que funciona en Visual Studio.

Cuestiones relacionadas