2008-12-16 10 views
9

me gustaría implementar un evento posterior a la compilación que lleva a cabo las siguientes accionesVS Mensaje Generar eventos

  1. Una copia ruta relativa de la salida DLL (1 archivo, no todo el jazz de depuración)
  2. Un registro la salida DLL a GAC ​​

¿Cómo se hace esto?

Respuesta

15

¿Eso es lo que quieres?

copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll 
regasm $(TargetPath) 

(Entró en el campo para la etapa posterior a la generación en virtud de las propiedades del proyecto)

+7

En Microsoft Visual Studio 2010, esto fallará con un error 9009: necesita usar la ruta completa a regasm, de la siguiente manera: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm.exe $ (TargetPath) – Contango

1

es posible que desee ver en MS Construir. Es lo que usamos aquí en el trabajo.

CodeProject Link & MSDN Ref

+0

Sí, MSBuild es excelente para eso. Si desea permanecer dentro de Visual Studio, también puede ingresar comandos posteriores a la compilación en las propiedades del proyecto. –

7

Enter siguiente en "Proyecto propiedades-> Construir eventos-> Post eventos de generación de línea de comandos:"

xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)" 

o añadir siguiente fragmento de proyectar (por ejemplo csproj) presentar

<PropertyGroup> 
    <PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent> 
</PropertyGroup> 

Tenga en cuenta que se recomienda agregar "" alrededor del comando de copia para evitar problemas con rutas que contienen espacios en blanco. También tenga en cuenta que se pueden combinar varios comandos usando & &

5

¿Está seguro de que quiere 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.

2

tuve que mismo tema y me ha costado un poco para que sea funciona.

En mi caso, quería hacer el de otra manera alrededor de que está copiando 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, depuración o Release).

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!

P.S. Uso Visual Studio 2010

0

Se ha producido un problema relacionado. Las respuestas aquí ayudaron (¡gracias!).

Mi escenario consistía en depurar 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!

Cuestiones relacionadas