2010-04-07 14 views
13

En otra parte de la Web, puede encontrar recomendaciones sobre el uso de algo así para simular la función Publicar en el IDE VS 2005-2008 desde una línea de comandos (espero no goof hasta la sintaxis):Objetivo de MSBuild _CopyWebApplication no copia todos los archivos necesarios en la carpeta bin

msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj 

Ahora, parece que los de .dll copian bien. Sin embargo, hay ciertos archivos de configuración y plantillas que se copian en la carpeta bin que son necesarios para que la aplicación funcione. Por ejemplo, un archivo de configuración NHibernate muestra en blah.csproj como:

<None Include="blah.cfg.xml"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 

Si bien la utilización Publicar desde dentro de las copias IDE este archivo como debe ser, el objetivo antes mencionado _CopyWebApplication no lo hace. Necesito que este archivo se copie en el script de compilación. ¿Es este comportamiento deseado para _CopyWebApplication? ¿Alguna recomendación sobre cómo solucionar esto?

EDITAR 4/21/2010:

Aclaro que estamos limitados (por ahora) a VS 2005 y VS proyectos de 2008, y que nuestros scripts de construcción están escritos para MSBuild 3.x. Todavía no estamos listos para pasar a VS 2010.

Permítanme también especificar que estamos buscando una solución disponible desde dentro de una línea de comando para que podamos automatizar un comando de publicación junto con opciones de compilación personalizadas, y posiblemente automatizar las implementaciones en el futuro.

+0

Extraño, tuve el mismo problema y agregué ResolveReferences antes de que _CopyWebApplication lo haya solucionado. ¿Estás seguro de que CopyLocal está configurado en True en todas tus referencias? –

+1

Puede que desee verificar este error http://connect.microsoft.com/VisualStudio/feedback/details/383199/resolvereferences-does-not-correctly-walk- all-references-in-dependent-projects –

+0

@Allen - I no miró CopyLocal. Leeré sobre eso. – apollodude217

Respuesta

6

Esto es solo una solución.

En el script de construcción para la publicación de sitios Web, después de ejecutar MSBuild en el proyecto Web en sí publicarla (Objetivos = "ResolveReferences; _CopyWebApplication"), he añadido una operación de copia:

<Copy SourceFiles="@(ProjectBinFiles)" DestinationFolder="$(StageBin)\%(ProjectBinFiles.RecursiveDir)" /> 

donde ProjectBinFiles es un elemento que representa los archivos en el directorio bin en el directorio fuente, y StageBin es una propiedad que representa la carpeta bin en el directorio del sitio publicado. Hasta ahora, parece funcionar.

+0

Lo he probado en varios proyectos, y parece funcionar bien. :) – apollodude217

+2

¿Debe definir las variables "ProjectBinFiles", "StageBin"? Necesito probar esto pero no estoy seguro de dónde implementar esto en mi tarea? – D3vtr0n

+0

Sí, deben definirse antes del comando Copiar. Alternativamente, puede codificar lo que quiera que sean esos valores. – apollodude217

0

Estaba teniendo un problema similar también. Creo que la respuesta es usar MSDeploy. Investigar ahora, pero puede proporcionar funcionalidad requerida ...

+0

¿Funcionará esto con los proyectos VS 2005 - 2008? Mi equipo aún no está listo para cambiar nada a VS 2010 o .NET 4, ya que todavía tenemos muchas aplicaciones bajo VS 2005. – apollodude217

0

tenía este mismo problema en VS 2012 y finalmente arreglaron haciendo lo siguiente a los archivos que debían ser copiado:

  • coloque la copia a la propiedad del archivo de salida a Copiar si es más nuevo
  • Conjunto la propiedad del archivo Build Action al contenido (o Compile si el archivo necesita ser compilado)
Cuestiones relacionadas