visual tutorial temas studio para ordenar linea iconos español configurar codigo code atajos ajuste visual-studio-2012 msbuild post-build-event

visual studio 2012 - tutorial - ¿Cómo soluciono el error MSB3073 en mi evento posterior a la compilación?



visual studio code español (12)

Estoy trabajando en un proyecto que requiere que las DLL generadas al compilar mi solución se copien de la carpeta bin a otra carpeta, ambas en mi máquina, en mi disco C. He escrito un archivo por lotes que usa xcopy para lograr esto, que puede ver aquí:

xcopy /s /y /q "C:/Users/scogan/Documents/Visual Studio 2012/Projects/Organizr/Server/bin/Debug/Organizr.Services.dll" "C:/inetpub/wwwroot/AppServer/bin/" xcopy /s /y /q "C:/Users/scogan/Documents/Visual Studio 2012/Projects/Organizr/Server/bin/Debug/Organizr.Services.pdb" "C:/inetpub/wwwroot/AppServer/bin/"

Ahora, he intentado numerosas iteraciones de este archivo, que se encuentra en:

C:/Users/scogan/Desktop/CopyFiles.bat

así que mi línea de comandos de eventos posteriores a la compilación se ve así:

call C:/Users/scogan/Desktop/CopyFiles.bat

He ejecutado este archivo por lotes solo con dos archivos de texto en carpetas en mi escritorio, y funciona bien. También lo ejecuté tal como está con los archivos que necesito copiar por mi cuenta, y eso también funciona bien. Sin embargo, cuando intento ejecutar esto como un evento posterior a la compilación, obtengo este resultado:

1> Organizr -> C:/Users/scogan/Documents/Visual Studio 2012/Projects/Organizr/Client/bin/Debug/Organizr.exe 1> File not found - Organizr.Services.dll 1> 0 File(s) copied 1> 0 File(s) copied 1> File not found - Organizr.Services.pdb 1>c:/Windows/Microsoft.NET/Framework/v4.0.30319/Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:/Users/scogan/Desktop/CopyFiles.bat" exited with code 4.

He investigado un poco y descubrí que el código de error 4 significa que "ocurrió un error de inicialización. No hay suficiente memoria o espacio en el disco, o ingresó un nombre de unidad no válido o una sintaxis no válida en la línea de comandos".

También he buscado qué es el MSB3073, y realmente no he encontrado mucho que pueda ayudarme allí. Entonces, mi pregunta es ¿qué estoy haciendo mal? ¿Los caminos absolutos lo están arruinando? Cualquier ayuda aquí será apreciada.


Descubrí que el problema ocurre cuando tienes varios proyectos construidos en paralelo y uno o más de los proyectos intentan copiar los mismos archivos, creando condiciones de carrera que resultarán en errores ocasionales. Entonces, ¿cómo resolverlo?

Hay muchas opciones, ya que cambiar algunas cosas podría resolver el problema para algunas personas. Más soluciones robustas serían ...

a. Restrinja los archivos que se copian, es decir, en lugar de xcopy $ (TargetDir) . "... en lugar de hacer xcopy" $ (TargetDir) $ (TargetName). * "...

segundo. Atrapa el error y vuelve a intentarlo

:loop xcopy /Y /R /S /J /Q "$(TargetDir)$(TargetName).*" "somewhere" if ErrorLevel 1 goto loop

do. Usuario robocopy en lugar de xcopy

re. Probablemente no querrá hacer esto ya que aumentará sus tiempos de compilación, pero podría reducir el número máximo de compilaciones de proyectos paralelos a 1 ...


El error especificado está relacionado con el evento post-construido. De alguna manera, la herramienta VS no puede copiar los archivos a la carpeta de destino. Puede haber muchas razones para ello. Para verificar la causa exacta del error, vaya a Herramientas> Opción> Proyecto y solución> Construido y ejecutado , y cambie la " verbosidad de salida de compilación del proyecto MsBuild " a " Diagnóstico ". Le dará suficiente información para detectar el problema real.


El evento posterior a la creación (en Eventos de creación, en el cuadro de diálogo de propiedades) de un proyecto importado, tenía una variable de entorno que no estaba definida.
Navegado a Control Panel/All Control Panel Items/System/Advanced system settings para agregar la variable de entorno adecuada , y al no hacer más que reiniciar VS2017 se resolvió el error.
Además, a partir de @Seans y otras respuestas con respecto a múltiples carreras / discusiones de proyectos, cree una carpeta temporal en la carpeta de salida como tal,

y seleccione el proyecto produciendo el resultado preferido:

y construir (no reconstruir / limpiar) es una solución rápida.


En mi caso, la dll que estaba creando al construir el proyecto todavía estaba en uso en segundo plano. Maté la aplicación y luego xcopy funcionó bien como se esperaba.


Esto es demasiado tarde, pero publicando mi experiencia para las personas que la ven más tarde: - En MS VS 2010 tuve el mismo problema. Se resolvió colocando comillas para publicar los argumentos de comando de compilación que contenían espacios.

En Propiedades del proyecto -> Propiedades de configuración -> Eventos de compilación -> Evento posterior a la compilación -> Línea de comando modificada

copy $ (ProjectDir) a / b / c $ (OutputPath)

a

copie "$ (ProjectDir) a / b / c" "$ (OutputPath)"


Jugando con diferentes propiedades del proyecto, encontré que el orden de construcción del proyecto era el problema. El proyecto que generó los archivos que quería copiar se construyó en segundo lugar , pero el proyecto que ejecutaba el archivo por lotes como un evento posterior a la compilación se construyó primero , así que simplemente adjunté el evento de compilación al segundo proyecto, y funciona simplemente multa. Gracias por tu ayuda, todos, sin embargo.


Lo resolví haciendo lo siguiente: En Visual studio entré en Proyecto -> Dependencias del proyecto

Seleccioné la solución XXX.Test y le dije que también depende de la solución XXX para que los eventos posteriores a la compilación en la solución XXX.Test no generen este error (salir con el código 4).

Saludos,


Lo siguiente que debe hacer antes de ejecutar el comando de copia si tiene algún problema con el comando de copia

  1. Abra la solución como administrador y cree la solución.
  2. Si tiene un problema como "0 archivos copiados", verifique la ruta de origen y destino. podría estar utilizando el camino equivocado sería mejor si ejecuta el mismo comando en el "símbolo del sistema" para verificar si está funcionando bien o no.

Para lo que vale, el problema en mi caso se debió al uso de ''/'' como separador de directorio en un comando de copy . Debe usar barras invertidas.


Prefiere la tarea "Copiar" de MsBuild en un objetivo de AfterBuild sobre un evento posterior a la compilación.

Agregue este destino en su archivo de proyecto y elimine el PostBuildEvent.

<Target Name="AfterBuild"> <Copy SourceFiles="C:/Users/scogan/Documents/Visual Studio 2012/Projects/Organizr/Server/bin/Debug/Organizr.Services.*" DestinationFolder="C:/inetpub/wwwroot/AppServer/bin/" OverwriteReadOnlyFiles="true" SkipUnchangedFiles="false" /> </Target>


Si el problema persiste incluso después de colocar la compilación posterior en el proyecto correcto, intente usar "copiar" en lugar de xcopy. Esto funcionó para mí.


Tuve el mismo problema para mi proyecto de prueba. Descubrí por qué mi evento posterior a la compilación no funcionaba y eso es porque estaba copiando archivos antes de ejecutar el comando $ (ProjectName) .exe y algunos de estos archivos fueron necesarios para el proyecto Test en sí mismo. Por lo tanto, simplemente moviendo $ (ProjectName) .exe como el primer comando corrige el problema.