asp.net - argumentos - ¿Por qué me faltan ensamblajes del directorio bin al compilar con MsBuild?
msbuild publish command line (9)
¿A qué msbuild estás haciendo referencia? ¿Es el correcto?
Generalmente llamo así (desde un archivo por lotes):
% WINDIR% / Microsoft.NET / Framework / v3.5 / msbuild.exe deploy.proj / v: n
En este ejemplo, deploy.proj es solo un archivo msbuild regular que hace otras cosas antes y después de llamar a msbuild en el archivo .sln.
Tengo una solución que contiene muchas bibliotecas de clases y un sitio web ASP .NET que hace referencia a esos ensamblajes.
Cuando construyo la solución desde el IDE, todos los ensamblados a los que hace referencia el sitio web terminan en el directorio bin. ¡Estupendo!
Cuando uso MsBuild desde la línea de comandos, todos los ensamblados a los que se hace referencia no se copian en el directorio bin. ¿Por qué?
Mi línea de comando es simplemente:
msbuild.exe d:/myproject/mysolution.sln
Creo que este problema solo ocurre cuando el directorio bin no es el predeterminado de una solución.
Entiendo que msbuild usa cada proyecto configurado para construirlo. Si esto es así, vaya a la página de propiedades de cada proyecto y verifique los argumentos de la línea de comando del evento de compilación posterior.
Si recuerdo, MSBuild no copió los ensamblajes a los que se hace referencia. He publicado una "solución" hace un tiempo: http://www.brunofigueiredo.com/post/Issue-Tracker-part-IV-The-Build-Enviroment-using-MSBuild-(or-NAnt).aspx
Espero eso ayude.
No he estado usando msbuild para ASP.NET, pero aspnet_compiler. Aunque ... no recuerdo por qué. Lo siento.
%windir%/Microsoft.Net/framework/v2.0.50727/aspnet_compiler -v /%~n1 -f -p ./%1 ./Website
He encontrado varias referencias a este problema esparcidas por la red, y acabo de encontrarlo por mi cuenta. Aparentemente, MSBuild en la línea de comandos no es tan bueno para rastrear cadenas de dependencias como el IDE.
Entonces, según lo entiendo, si A depende de B, que depende de C, es posible que la línea de comando no se dé cuenta de que A depende de C.
La única solución que he encontrado es garantizar que configure manualmente las dependencias del proyecto para que el proyecto ASP haga referencia a todo lo que dependa, no espere que pueda resolverlas por completo en la línea de comandos. Esto funcionó para mí, aunque solo tengo 5 proyectos, así que no es un compromiso para empezar.
Espero que esto ayude.
Puede hacer uso de los pasos posteriores a la compilación en las propiedades del proyecto para copiar la salida del proyecto a una ubicación particular.
Esto se copia a un directorio de Ensambles en el mismo directorio que el archivo Sln. Tengo esto en el paso posterior a la construcción de todos mis proyectos.
md "$(SolutionDir)Assemblies"
del "$(SolutionDir)Assemblies/$(TargetFileName)"
copy "$(TargetPath)" "$(SolutionDir)Assemblies" /y
El problema al que me enfrentaba era que tenía un proyecto que depende de un proyecto de biblioteca. Para construir, estaba siguiendo estos pasos:
msbuild.exe myproject.vbproj /T:Rebuild
msbuild.exe myproject.vbproj /T:Package
Eso, por supuesto, significaba que estaba perdiendo los archivos dll de mi biblioteca en el contenedor y, lo más importante, en el archivo comprimido del paquete. Encontré que esto funciona perfectamente:
msbuild.exe myproject.vbproj /T:Rebuild;Package
No tengo idea de por qué este trabajo o por qué no lo hizo en primer lugar. Pero espero que eso ayude.
Problema conocido para MSBuild 3.5 y msbuild 4.5. Estoy usando Msbuild 4 encontrado en
c:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe <yourSolutionFile>.sln
Parece resolver el problema.
Siempre puede usar una tarea de copia en MSBuild para colocar sus ensamblajes en el directorio apropiado. Hice una pregunta no hace mucho tiempo y terminé respondiéndola yo mismo. Muestra cómo puede configurar su tarea de copia para obtener el resultado de otro proyecto y llevarlo a su proyecto de destino:
Copia MSBuild salida de otro proyecto en la salida del proyecto actual