visual una tiene studio referencias referencia que puedo puede proyecto clases biblioteca asegurese archivo agregar administrador acceso c# visual-studio reference project conditional-compilation

c# - tiene - Referencia de proyecto condicional de Visual Studio basada en una constante



no se puede agregar referencia.dll c# (1)

Sospecho que el problema es que estás condicionando una referencia de proyecto al Module1 , no si se debe incluir el Module1 en la solución.

Incluir un proyecto en una solución (y, por lo tanto, cargarlo con la solución) y un proyecto que hace referencia a otro proyecto en una solución son dos cosas diferentes, por supuesto.

ACTUALIZAR:

Si realmente desea condicionar una referencia de proyecto, Joe Wrobel escribió una publicación de blog relacionada que debería ayudar. El punto clave es envolver el ItemGroup que contiene ProjectReference para condicionarlo en un elemento Choose , por ejemplo:

<Choose> <When Condition="$(DefineConstants.Contains(''SAMPLECONSTANT1''))"> <ItemGroup> <ProjectReference Include="../Solution1.Modules.Module1/Solution1.Modules.Module1.csproj"> <Project>{4E378BD0-4FF8-4160-9331-1ECBFD2B6F30}</Project> <Name>Solution1.Modules.Module1</Name> </ProjectReference> <!-- other ProjectReference elements --> </ItemGroup> </When> <Otherwise> <ItemGroup> <!-- other ProjectReference elements --> </ItemGroup> </Otherwise> </Choose>

De mis pruebas de esta tarde, esto funciona muy bien para condicionar las referencias de un proyecto sobre si se define una constante como SAMPLECONSTANT1 . Sin embargo, tenga en cuenta que las referencias de proyecto condicionadas no se muestran en el Explorador de soluciones en la carpeta Referencias del proyecto de referencia (que se debe hacer), independientemente de si se define la constante de acondicionamiento.

Para ver que el acondicionamiento funcionaba, tuve que construir : con SAMPLECONSTANT1 definido, el proyecto de referencia se construyó correctamente al usar una clase definida en el Module1 , como se esperaba; y sin SAMPLECONSTANT1 definido, el proyecto de referencia no pudo compilar porque la clase definida en el Module1 no se pudo resolver, también como se esperaba.

Para la autorización del usuario, solo deseo incluir un módulo específico para cada usuario. Así que configuré la compilación condicional como esta

<DefineConstants>TRACE;DEBUG;SAMPLECONSTANT1</DefineConstants>

y editó el archivo de proyecto de esta manera:

<ProjectReference Include="../Solution1.Modules.Module1/Solution1.Modules.Module1.csproj" Condition="$(DefineConstants.Contains(''SAMPLECONSTANT1''))"> <Project>{4E378BD0-4FF8-4160-9331-1ECBFD2B6F30}</Project> <Name>Solution1.Modules.Module1</Name> </ProjectReference>

Para este caso, deseo agregar una referencia al proyecto Module1 si DefineConstants contiene SAMPLECONSTANT1 ; pero no importa lo que ponga en DefineConstants , la solución siempre carga el proyecto Module1 . ¿Qué hice mal aquí?

ACTUALIZACIÓN: En realidad, mi código es correcto. Por favor, vea la respuesta de J0e3gan. La interfaz de usuario de Visual Studio no refleja las referencias condicionales dentro de la carpeta References de un proyecto. Por lo tanto, todas las referencias son visibles en cualquier configuración dada o selección de plataforma. El compilador e IntelliSense, por otro lado, están al tanto de las referencias condicionales, respetando las configuraciones correctas con comentarios visuales y notificaciones de errores durante las compilaciones.