Tengo cuatro proyectos en mi solución de Visual Studio (todos dirigidos a .NET 3.5). Para mi problema, solo estos dos son importantes:
- MyBaseProject <: esta biblioteca de clases hace referencia a un archivo DLL de terceros (elmah.dll)
- MyWebProject1 <- este proyecto de aplicación web tiene una referencia a MyBaseProject
Agregué la referencia elmah.dll a MyBaseProject en Visual studio 2008 haciendo clic en "Agregar referencia ..." → pestaña "Examinar" → seleccionando "elmah.dll".
Las propiedades de la referencia de Elmah son las siguientes:
- Alias - global
- Copiar local - verdadero
- Cultura -
- Descripción - Módulos y controladores de registro de errores (ELMAH) para ASP.NET
- Tipo de archivo - Ensamblaje
- Ruta - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- Resuelto - Verdadero
- Versión de tiempo de ejecución - v2.0.50727
- Versión especificada - falso
- Nombre fuerte - falso
- Versión - 1.0.11211.0
En MyWebProject1 agregué la referencia al Proyecto MyBaseProject: "Agregar referencia ..." → pestaña "Proyectos" → seleccionando "MyBaseProject". Las propiedades de esta referencia son las mismas, excepto los siguientes miembros:
- Descripción -
- Ruta - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- Versión - 1.0.0.0
Si ejecuto la compilación en Visual Studio, el archivo elmah.dll se copia en el directorio bin de MyWebProject1 , junto con MyBaseProject.dll.
Sin embargo, si limpio y ejecuto MSBuild para la solución (a través de D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: Configuration = Debug MyProject.sln ) falta el elmah.dll en el directorio bin de MyWebProject1, ¡aunque la compilación en sí no contiene advertencias ni errores!
Ya me aseguré de que el .csproj de MyBaseProject contenga el elemento privado con el valor "verdadero" (que debería ser un alias para " copiar local " en Visual Studio):
<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
**<Private>true</Private>**
</Reference>
(La etiqueta privada no apareció en el xml de .csproj de manera predeterminada, aunque Visual Studio dijo "copiar local" verdadero. Cambié "copiar local" a falso - guardado - y lo configuré nuevamente como verdadero - ¡guardar!)
¿Qué le pasa a MSBuild? ¿Cómo obtengo la referencia (elmah.dll) copiada en el contenedor de MyWebProject1?
¡NO quiero agregar una acción de copia posterior a la construcción al comando de construcción posterior de cada proyecto! (¡Imagínese que muchos proyectos dependerían de MyBaseProject!)