2010-07-01 11 views
10

tengo un proyecto que tiene un evento posterior a la generación que xcopies un DLL a un determinado directorio:MSBuild'ing un proyecto con un post-evento construir xcopy

xcopy "$ (TargetDir) $ (TargetName) .dll "" $ (SolutionDir) .. \ UdpLocationService \ bin \ Plugins \ "/ d/y xcopy" $ (TargetDir) $ (TargetName) .pdb "" $ (SolutionDir) .. \ UdpLocationService \ bin \ Plugins \ "/ d/y

Sin embargo, tengo CruiseControl.NET configurar como un servidor de compilación y MSBuild está fallando en la construcción de ese proyecto debido a esta xcopy posterior a la generación de eventos:

MSB3073: El comando "xcopy" C: \ Build \ Services \ Windows \ VehicleServer \ Plugins \ Payload \ bin \ Debug \ Payload.dll "Indefinido .. \ UdpLocationService \ bin \ Plugins \"/d/y xcopy "C: \ Build \ Services \ Windows \ VehicleServer \ Plugins \ Payload \ bin \ Debug \ Payload.pdb" "Indefinido .. \ UdpLocationService \ bin \ Plugins \"/d/y "salido con el código 4. en Microsoft.Common.targets (3397, 13)

¿Alguna sugerencia para solucionarlo? Gracias,

Justin

Respuesta

4

Siga estos pasos:

  • descargar su archivo de proyecto (por ejemplo * .csproj)
  • Abra el archivo de proyecto para la edición de
  • Encuentra la AfterBuild se dirigen a
  • Separe las dos invocaciones de XCopy en dos tareas de Exec distintas
  • Guarde los cambios y Reloa d su archivo de proyecto
+0

Gracias, que fija el primer error, pero no el segundo: MSB3073: El comando "xcopy "C: \ Build \ Services \ Windows \ VehicleServer \ Plugins \ carga útil \ bin \ Debug \ Payload.pdb"" * No definido * .. \ UdpLocationService \ bin \ Plugins \ "/ d/y" salido con el código 4. en Microsoft.Common.targets (3397, 13) – Justin

+0

También debo agregar que no hay AfterBuild o exec en el archivo csproj.Esto es lo que parece: xcopy "$ (TargetDir) $ (TargetName) .dll" "$ (SolutionDir) .. \ UdpLocationService \ bin \ Plugins \"/d/y xcopy "$ (TargetDir) $ (TargetName) .pdb" "$ (SolutionDir) .. \ UdpLocationService \ bin \ Plugins \"/d/y Justin

+0

¿Qué versión? de Visual Studio estás usando? –

22

Acabo de encontrar el mismo problema con TeamCity.

El problema aquí es la propiedad $ (SolutionDir) en su archivo de compilación. No lo ha definido en su llamada a MsBuild (esta es la razón por la que ve la palabra undefined en su salida).

msbuild llamada que tiene el conjunto de propiedades, así:

msbuild myproject.csproj /property:SolutionDir="solution directory"\ 

donde "directorio de la solución" es el directorio que contiene el archivo de solución. Tenga en cuenta la barra final, la necesitará para asegurarse de que la ruta esté formada correctamente.

+0

o puede incluir la barra al final dentro de las comillas dobles, solo recuerde escapar con otra barra invertida. Entonces, en mi caso, la llamada sería msbuild myproject.csproj/property: SolutionDir = "% teamcity.build.checkoutdir% \\" –

7

que fija este caso de problemas con el paquete Nuget Microsoft.SqlServer.Compact (que añade un script posterior a la generación similar), añadiendo:

<SolutionDir Condition="'$(SolutionDir)'=='' or '$(SolutionDir)'=='*Undefined*'">..\</SolutionDir> 

justo encima de la <PostBuildEvent>. Deberá ajustar la ruta relativa para que coincida con el diseño de su proyecto.

+2

Este error puede ocurrir al construir un proyecto en lugar de una solución. Cuando esto sucede, $ (SolutionDir) está * indefinido * y la solución anterior supera la limitación. – Philippe

Cuestiones relacionadas