visual-studio - virtualstudio - visual studio light
Evento VS Build Build (7)
Me gustaría implementar un evento de compilación posterior que realice las siguientes acciones
- Una copia de ruta relativa de la salida de DLL (1 archivo, no todo el depuración de jazz)
- Un registro de la salida DLL a GAC
¿Cómo se hace esto?
¿Eso es lo que quieres?
copy $(TargetPath) $(TargetDir)../../someFolder/myoutput.dll
regasm $(TargetPath)
(Ingresado en el campo para el paso posterior a la construcción en las propiedades del proyecto)
es posible que desee ver MS Build. Es lo que usamos aquí en el trabajo.
Ingrese lo siguiente en "Propiedades del proyecto-> Eventos de compilación-> Publicar línea de comando de eventos de compilación:"
xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"
o agregue el siguiente fragmento de código al archivo de proyecto (por ejemplo, csproj)
<PropertyGroup>
<PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent>
</PropertyGroup>
Tenga en cuenta que se recomienda agregar "" alrededor de los argumentos del comando de copia para evitar problemas con las rutas que contienen espacios en blanco. También tenga en cuenta que múltiples comandos se pueden combinar usando &&
¿Estás seguro de que quieres hacer esto como parte de una compilación? Recomendaría utilizar referencias de proyecto en soluciones en lugar de GAC si puede evitarlo. Copiar archivos es una cosa, pero registrarse en el GAC es bastante intrusivo y es posible que desee considerar los otros entornos en los que se compila su código. Cosas como máquinas de otros desarrolladores, entornos de prueba / servidores de compilación etc. Si tiene un servidor de compilación realmente deberías estar usando algo como NAnt con algún tipo de servidor de integración continua.
Para el paso 2 en la pregunta, parece preferir lo siguiente:
"C:/Program Files/Microsoft SDKs/Windows/v6.0A/bin/gacutil" /f /i $(TargetPath)
Nota: esto requiere que el SDK de Windows esté instalado en su máquina de desarrollo.
Más información sobre las macros disponibles, como $ (TargetPath), en MSDN.
Se encontró con un problema relacionado. Las respuestas aquí ayudaron (¡gracias!).
Mi escenario estaba en la depuración de una aplicación dependiente de MEF que necesitaba para tener los archivos DLL relacionados en una ubicación determinada. Me encontré con el problema de sobrescribir la versión anterior, así que necesité agregar una eliminación al script.
delete $(SolutionDir)FileService/$(ProjectName).dll
copy $(TargetPath) $(SolutionDir)FileService/$(ProjectName).dll
¡Espero que ayude a alguien también!
Tuve el mismo problema y luché un poco para que funcione.
En mi caso, quise hacer a la inversa, lo cual es copiar el DLL de SDL en mi carpeta de salida.
copy "$(SolutionDir)SDL/lib/x86/SDL.dll" "$(SolutionDir)$(Configuration)/"
Tenga en cuenta que $(Configuration)
será su carpeta de salida (por ejemplo, Depurar o Liberar).
Las citas eran lo que me faltaba, aparentemente las necesitas cuando el lado derecho termina con un /
. Por lo tanto, podría ser más seguro usarlos siempre.
¡Espero salvar a alguien más en 5 minutos!
PD: uso Visual Studio 2010