Microsoft.WebApplication.targets no se encontró en el servidor de compilación. Cual es tu solucion

410

Intentar compilar mi proyecto en el servidor de compilación me da el siguiente error:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Resolví este problema hace unos meses, con la instalación de Visual Studio 2010 en el servidor de compilación. Pero ahora estoy configurando un nuevo servidor desde cero, y quiero saber si hay alguna solución mejor para resolver este problema.

apilador
fuente
1
¿Los proyectos de aplicaciones web están en desuso? Me pregunto cuál es la razón para requerir versiones antiguas de Visual Studio para construirlas.
brianary
1
Más concretamente, ¿se implementa realmente a través del servidor de compilación? por ejemplo, no, incluso tengo un proyecto de instalador web separado en la solución ... y todavía quiere esta cosa sangrienta ... answer = ¡elimínelo del archivo de proyecto! fácil.
Paul Zahra
1
Se corrigió reemplazando <Import Project="..\Packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />la ruta con $(VSToolsPath):<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
GJ

Respuestas:

207

Para responder el título de la pregunta (pero no la pregunta sobre el resultado que está obteniendo):

Copiar la siguiente carpeta desde su máquina de desarrollo a su servidor de compilación corrige esto si solo se trata de aplicaciones web

C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

Elimina x86 según cómo se rompa tu compilación. Si tiene otros tipos de proyectos, probablemente necesite copiar toda la carpeta msbuild.

Chris S
fuente
11
Esto funcionó para m2 con un proyecto VS2012, después de reemplazar v10.0 a v11.0
DenNukem
2
¿No podemos instalar las herramientas de MSBuild en lugar de esto? microsoft.com/en-us/download/confirmation.aspx?id=40760
user20358
1
Desgraciadamente, instalar las herramientas de MSBuild no es suficiente para construir proyectos que se compilan bien en VisualStudio 2013
Michael Shaw
Tuve que copiar la carpeta web a v11.0 para que funcione después de instalar VS2013, faltaba allí. Podría compilar en VS pero no a través de MSBUILD directamente.
Martin Braun
99
Trabajó para VS2017. simplemente copie C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ vXX.0 \ WebApplications a C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ WebApplications
jokab
95

La creación y publicación de WAP no es compatible si VS no está instalado. Dicho esto, si realmente no desea instalar VS, deberá copiar todos los archivos que se encuentran debajo %ProgramFiles32%\MSBuild\Microsoft\.

También necesitará instalar la herramienta de implementación web . Creo que eso es todo.

Sayed Ibrahim Hashimi
fuente
44
Sayed - vea la respuesta a continuación de dansomething - ¿es correcta su respuesta? ¿Incluso instalando el paquete VS 2010 Shell Integrated y .NET SDK no instalará correctamente el soporte de proyectos de aplicaciones web?
Adam
@SayedIbrahimHashimi, ¿tiene que registrar las DLL con el GAC si hace una copia manual de la carpeta?
TheOptimusPrimus
¿Y qué hay de los Microsoft.TextTemplating.targets? ¿Qué tengo que hacer para ponerlos en su carpeta? C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0
Desarrollador
@ClarkKent, lo siento, no puedo hablar con el archivo TextTemplating. No estoy familiarizado con eso.
Sayed Ibrahim Hashimi
77

UPD: a partir de VS2017, existe una carga de trabajo en Build Tools que elimina este problema por completo. Ver la respuesta de @SOReader .

Si prefiere no modificar nada en el servidor de compilación, y aún desea que el proyecto se compile directamente fuera del control de origen, puede ser una buena idea poner los binarios necesarios bajo control de origen. Tendrá que modificar la sección de importaciones en su archivo de proyecto para que se vea así:

<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

La primera línea es la importación real desde la nueva ubicación que es relativa al directorio de la solución. La segunda es una versión desactivada ( Condition="false") de la línea original que permite que Visual Studio todavía considere que su proyecto es un Proyecto de Aplicación Web válido (ese es el truco que VS 2010 SP1 hace por sí mismo).

No se olvide de copiar el C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplicationsde BuildTargetscarpeta bajo el control de código fuente.

Andriy K
fuente
Esta solución funcionó para mí y fue realmente la mejor opción en mi caso. Esto se debe a que no tengo acceso al servidor de compilación. Estoy usando el bambú elástico de Atlassian que hace girar un nuevo servidor para que actúe como servidor de compilación. A primera vista, ¿no parece que estas AMI incluyen los objetivos de la aplicación web? Eso no tiene sentido para mí, pero así es como parece.
Cody Clark el
1
Este es un buen enfoque, pero este cambio requiere que se cambie cada archivo csproj. Es complicado si agrega nuevos proyectos a la solución. Por supuesto, se puede resolver con plantillas de proyecto personalizadas, pero aún así ... De todos modos, esta respuesta me indicó la dirección correcta. ¡Gracias!
100r
76

En este momento, en 2017, puede instalar redistas de aplicaciones web con MSBuildTools. Simplemente vaya a esta página que descargará MSBuild 2017 Tools y durante la instalación, haga clic Web development build toolspara instalar también estos objetivos: ingrese la descripción de la imagen aquí

Esto conducirá a la instalación de bibliotecas faltantes C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationspor defecto

SOReader
fuente
2
Estoy bastante sorprendido de que mi hijo de cinco años acerca de incluir las bibliotecas en el control de la fuente, y sus modificaciones todavía están obteniendo votos, incluso hoy, mientras que esto es correcto.
Andriy K
2
@AndriyK Su solución es un poco diferente de lo que sugerí y entiendo por qué alguien podría preferir la suya sobre la mía ... a menos que sea solo pereza; D
SOReader
2
Para hacerlo más general, para futuras versiones de Visual Studio, puede descargar las últimas herramientas de compilación desde visualstudio.microsoft.com/downloads Desplácese hacia abajo de la página y cerca de la parte inferior expanda la sección "Herramientas para Visual Studio", luego descargue la " Herramientas de compilación para Visual Studio ". Actualmente, estos son para VS 2017, pero supongo que será lo mismo para futuras versiones. Por cierto, si necesita la ruta a msbuild.exe para su herramienta CI (por ejemplo, Jenkins), para VS 2017 se instalará en C: \ Archivos de programa (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ msbuild.exe.
Simon Tewsi
2
La forma de hacerlo compatible con el servidor de compilación (léase: línea de comando) es choco install visualstudio2017-workload-webbuildtools.
Paul Hicks
1
También tenga en cuenta que el paquete "Web herramientas de desarrollo de construcción" , Microsoft.VisualStudio.Workload.WebBuildToolsse puede instalar a través de la línea de comandos llamando vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools. Agregar --passivepara no necesitar intervención del usuario.
Wai Ha Lee
70

También puede usar el paquete NuGet MSBuild.Microsoft.VisualStudio.Web.targets , haciendo referencia a ellos dentro de su (s) proyecto (s) de Visual Studio, luego cambie sus referencias como sugiere Andriy K.

Lloyd Holman
fuente
2
Es imposible de usar porque primero tengo que abrir la solución, pero no puedo debido al error.
Desarrollador
Si hay más de un proyecto en la solución, aún debería poder 1. abrir la solución: ignorar que el proyecto web no se carga; 2. agregue la referencia nuget; 3. tome uno de los enfoques mencionados después de eso; puede editar manualmente el archivo del proyecto o anular la variable env.VSToolsPath en TeamCity.
Damon
1
¿Es este un paquete de MS Nuget lanzado oficialmente, o alguien lo creó?
Simon_Weaver
maravillosa solución: funciona para diferentes versiones de VS. Necesitaba editar el archivo .csproj, YMMV
Jonno
39
No es un paquete Nuget de Microsoft lanzado oficialmente. Lo sé porque lo creé.
mak
54

Con base en esta publicación aquí , simplemente puede descargar el paquete redistribuible de Microsoft Visual Studio 2010 Shell (integrado) y los destinos están instalados.

Esto evita la necesidad de instalar Visual Studio en el servidor de compilación.

Acabo de probar esto ahora y puedo verificar que funciona:

Antes de:

error MSB4019: no se encontró el proyecto importado "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets". Confirme que la ruta en la declaración es correcta y que el archivo existe en el disco.

Después de la instalación:

[Construye correctamente]

Obviamente, esta es una solución mucho mejor que instalar Visual Studio en un servidor de compilación.

Matthew Skelton
fuente
77
Esta es la solución más fácil y sencilla de la OMI. Estoy usando VS 2013, y descubrí que el Visual Studio 2013 Shell (Aislado) Redistribuible era lo que funcionaba (el Integrado no se instalaría debido a la dependencia del Aislado).
Matt Miller
@MatthewSkelton - ¿Cuál es el significado del servidor de compilación ?
Mohammed Zameer
2
@BountyMan: un servidor de compilación es un servidor que realiza o controla compilaciones de integración continua (CI) del software. Ejemplos: Jenkins, TeamCity, CruiseControl, etc.
Matthew Skelton
3
Desafortunadamente con VS v14.0, la forma de instalar el paquete es a través de nuget, pero dado que mi problema era que el servidor de compilación no tenía VS instalado (solo MSBuild), la instalación del paquete resultó casi imposible. Pasé horas buscando torpemente con PowerShell y varias instalaciones de Nuget respaldadas a medias antes de simplemente copiar la carpeta de mi PC al servidor.
pasx
1
@pasx Si el mensaje de error contiene "v14", puede instalar el Shell aislado de Visual Studio 2015 en su lugar, funcionó para mí: visualstudioextensibility.com/downloads/vs-shells (en "Descargar URL"; hay una encuesta obligatoria, ¡disfrute!)
Dunc
38

El último SDK de Windows, como se mencionó anteriormente, además del "Paquete redistribuible (integrado) de Microsoft Visual Studio 2010 Shell" para Microsoft.WebApplication.targets y "Microsoft Visual Studio Team System 2008 Database Edition GDR R2" para Microsoft.Data.Schema .SqlTasks.targets debería aliviar la necesidad de instalar Visual Studio 2010. Sin embargo, la instalación de VS 2010 en realidad puede ser menos general para descargar y menos trabajo al final.

dansomething
fuente
Para su información: si está tratando de construir proyectos SQL en un servidor de compilación sin instalar VS completo, no tiene suerte con el instalador Team System 2008 Database Edition GDR R2 mencionado aquí. Sus requisitos previos son Visual Studio Team System 2008 Database Edition SP1 (inglés) o Visual Studio Team System 2008 Suite SP1 (inglés) Y Visual Studio 2008 Service Pack 1. Parece, sin embargo, que puede copiar SqlServer.targets de .NET Framework \ v4 y el TeamData msbuild apunta a archivos fuera de \ archivos de programa \ msbuild \ microsoft \ visual studio \ v10.0 \ y sus csprojs se construirán.
Ethan J. Brown
Definitivamente no es la solución más bonita, pero para mí el tiempo es lo más importante. Simplemente copiar sobre el directorio de MSBuild solo me genera más problemas.
21
Esta es una respuesta realmente importante porque si usted es un desarrollador independiente que configura un servidor de compilación para un cliente, no desea que el cliente tenga que mantener una licencia de Visual Studio para poder compilar su software.
thelsdj
Solo necesitaba el paquete integrado de shell VS2010 y EntLib 5 para construir el mío. No necesitaba el sistema de equipo.
Robin Winslow
1
VS 2010 Shell ya no está disponible en ese enlace, "El recurso que está buscando se ha eliminado, se le ha cambiado el nombre o no está disponible temporalmente".
Kristianp
22

Agregue dependencia a través de NuGet y establezca un parámetro de compilación

Objetivo: no se necesitan cambios / instalaciones para los agentes de compilación

Aquí tomé un enfoque híbrido del enfoque NuGet de Lloyd , que se basó en el solución de dependencias binarias comprometidas de Andrik.

El motivo es que quiero poder agregar nuevos agentes de compilación sin tener que configurarlos previamente con elementos como este.

  1. En una máquina con Visual Studio, abra la solución; ignore que el proyecto web falla.
  2. En el administrador de paquetes NuGet, agregue MSBuild.Microsoft.VisualStudio.Web.targets , como mencionó Lloyd.
  3. Esto resolverá los binarios para [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
    1. Puede copiarlos en una carpeta de referencias y commit,
    2. O simplemente úselos donde están. Elegí esto, pero tendré que lidiar con el número de versión en la ruta más adelante.

En la versión 7, hice lo siguiente. Esto puede no haber sido necesario, y en base a los comentarios definitivamente no es necesario ahora. Por favor, vea los comentarios a continuación.

  1. A continuación, en la configuración de compilación de TeamCity, agregue un Paramenter de compilación env.VSToolsPathy configúrelo en la carpeta VSToolsPath; solía..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath
Damon
fuente
8
no es necesario realizar el paso 4, si simplemente reemplaza el elemento <Import> en su archivo de proyecto con este:<Import Project="..\..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.12.0.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />
llamado el
Esta debería ser la respuesta aceptada ... y el punto 4 debería eliminarse.
Izzy
@Izzy gracias, ¿hiciste el comentario como knocte indicado? No he usado TC en algunos años, versión 7 iirc.
Damon
@ Damon, estoy usando Jenkins y no TC, así que podría ser por eso que no necesitaba tu último punto.
Izzy
21

Al compilar en el servidor de compilación / CI, desactive la importación por Microsoft.WebApplication.targetscompleto especificando /p:VSToolsPath=''. Esto, esencialmente, hará que la condición de la siguiente línea sea falsa:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />


Así es como se hace en TeamCity:

ingrese la descripción de la imagen aquí

Alex R.
fuente
Los objetivos de compilación son necesarios si está utilizando el mecanismo "Publicar" de Visual Studio. Hacer esto permite que la compilación continúe y se complete, pero podría estar incompleta.
starlocke
14

Si migra Visual Studio 2012 a 2013, abra el archivo de proyecto * .csproj con edior.
y marque el elemento ToolsVersion de la etiqueta 'Proyecto'.

Cambie su valor de 4.0 a 12.0

  • Desde

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" ...
  • A

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" ...

O bien, si crea con msbuild, simplemente especifique la propiedad VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0

Fuente de solución

Korayem
fuente
44
Agregar /p:VisualStudioVersion=12.0 a MSBuild Arguments en la definición de compilación TFS 2013 (para una solución creada en Visual Studio 2013) funcionó para mí. Por alguna razón, buscaría archivos en una carpeta v11.0 sin ningún parámetro.
Sacha K
3
Esta solución funcionó para mí, usé ese comando:msbuild /p:Platform=x86 /p:VisualStudioVersion=12.0
E.Meir
9

Parece que la nueva versión de msbuild no se incluye con Microsoft.WebApplication.targets. Para solucionarlo, debe actualizar su archivo csproj de la siguiente manera:

1) Edite la aplicación web csproj (clic derecho). Encuentre la sección en csproj hacia la parte inferior sobre herramientas de compilación. Debería verse así.

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2) Debe agregar una línea VSToolsPath debajo de la etiqueta VisualStudioVersion para que se vea así

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

Enlace de referencia: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/

Huy Truong
fuente
8

Esto es todo lo que necesita. Solo 103MB. No instales todo

ingrese la descripción de la imagen aquí

Simon_Weaver
fuente
¿Cómo puedo poner una marca de verificación en ese formulario, sin instalar nada?
Christian
5

He encontrado esto en MS connect :

Sí, debe instalar Visual Studio 2010 en su máquina de compilación para compilar proyectos de bases de datos. Hacerlo no requiere una licencia adicional de Visual Studio.

Entonces, esta es la única opción que tengo por ahora.

apilador
fuente
2
El enlace parece estar roto.
Desilusionado el
2

Mi solución es una mezcla de varias respuestas aquí.

Verifiqué el servidor de compilación y Windows7 / NET4.0 SDK ya estaba instalado, así que encontré la ruta:

C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets`

Sin embargo, en esta línea:

<Importar proyecto = "$ (MSBuildExtensionsPath) \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets" />

$ (MSBuildExtensionsPath) se expande a C: \ Archivos de programa \ MSBuild que no tiene la ruta.

Por lo tanto, lo que hice fue crear un enlace simbólico, usando este comando:

mklink / J "C: \ Archivos de programa \ MSBuild \ Microsoft \ VisualStudio" "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio"

De esta manera, $ (MSBuildExtensionsPath) se expande a una ruta válida, y no se necesitan cambios en la aplicación en sí, solo en el servidor de compilación (quizás uno podría crear el enlace simbólico en cada compilación, para asegurarse de que este paso no se pierda y esté "documentado ").

Kat Lim Ruiz
fuente
2

Lo arreglé agregando
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"

a
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

Monohilo
fuente
2

Probé un montón de soluciones, pero al final esta respuesta funcionó para mí: https://stackoverflow.com/a/19826448/431522

Básicamente implica llamar a MSBuild desde el directorio de MSBuild, en lugar del directorio de Visual Studio.

También agregué el directorio MSBuild a mi ruta, para que los scripts sean más fáciles de codificar.

Hendrikswan
fuente
2

Alguien que vino aquí para Visual Studio 2017. Tuve el problema similar y no pude compilar el proyecto después de la actualización a 15.6.1. Tuve que instalar las herramientas de MSBulild pero aún así el error estaba allí.

Pude solucionar el problema copiando la v14.0carpeta de C:\Program Files (x86)\MSBuild\Microsoft\VisualStudiola misma carpeta v15.0y eso resolvió todos los errores. Entonces, la estructura de mi carpeta se ve a continuación, donde ambas carpetas contienen el mismo contenido.

ingrese la descripción de la imagen aquí

Habib
fuente
2

Si está utilizando MSBuild, como en el caso de un servidor de compilación, lo que funcionó para mí es:

Cambia lo siguiente:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

a:

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

Mi comando Msbuild es: *"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

Espero que esto ayude a alguien.

Colin Q
fuente
por mencionar, los cambios deben hacerse a los archivos ofensivos .csproj, vbproj.
Colin Q
0

En caso de que si está tratando de implementar un proyecto usando VSTS, el problema podría estar relacionado con la opción "Contenedor de Windows alojado" en lugar de "VS2017 alojado" (o 18, etc.):

ingrese la descripción de la imagen aquí

Arsen Khachaturyan
fuente
0
  • Después de la instalación de las herramientas de MSBuild de Microsoft, defina la ruta de MSBuild en la variable de entorno, de modo que pueda ejecutarse desde cualquier ruta.
  • Edite el archivo .csproj en cualquier editor de bloc de notas, como notepad ++, y comente el
  • Verifique los siguientes elementos, ->
    • Asegúrese de utilizar la importación solo una vez, elija lo que funcione.
    • Asegúrese de tener la siguiente carpeta en la unidad, "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0" o la versión a la que haga referencia el destino de MSBuild en "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebApplications \ Microsoft.WebApplication.targets "
    • Desde el símbolo del sistema, ejecute el siguiente comando para verificar

C:> msbuild "C: \\ DotnetCi.sln" / p: Configuration = Release / p: UseWPP_CopyWebApplication = true / p: PipelineDependsOnBuild = false

Pankaj Awasthi
fuente
0

Estaba teniendo este problema al construir un proyecto de SQL Server en una tubería de CI / CD. De hecho, también lo tenía localmente y no pude resolverlo.

Lo que funcionó para mí fue usar un SDK de MSBuild , capaz de producir un paquete de aplicación de nivel de datos de SQL Server ( .dacpac) a partir de un conjunto de scripts SQL, lo que implica crear un nuevo proyecto. Pero quería mantener el proyecto de SQL Server, para poder vincularlo a la base de datos en vivo a través del Explorador de objetos de SQL Server en Visual Studio. Tomé los siguientes pasos para tener esto en funcionamiento:

  1. Mantuve mi proyecto de SQL Server con el .sql scripts de base de datos.
  2. Creé un proyecto de biblioteca de clases .NET Standard 2.0, asegurándome de que el marco de destino fuera .NET Standard 2.0, según las pautas en el enlace anterior.
  3. Establezca el contenido de la .csprojsiguiente manera:

    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="MSBuild.Sdk.SqlProj/1.0.0">
      <PropertyGroup>
        <SqlServerVersion>Sql140</SqlServerVersion>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    </Project>
  4. Elegí Sql140 como la versión de SQL Server porque estoy usando SQL Server 2019. Verifique esta respuesta para averiguar la asignación a la versión que está usando.

  5. Ignore el proyecto de SQL Server en la compilación, de modo que deje de romperse localmente (se compila en Visual Studio, pero falla en el código VS).

  6. Ahora solo tenemos que asegurarnos de que los .sqlarchivos están dentro del proyecto SDK cuando se construye. Lo logré con una rutina simple de PowerShell en la tubería de CI / CD que copiaría los archivos del proyecto SQL Server al proyecto SDK:

Copy-Item -Path "Path.To.The.Database.Project \ dbo \ Tables \ *" -Destination (New-item -Name "dbo \ Tables" -Type Directory -Path "Path.To.The.DatabaseSDK.Project \ ")

PD: los archivos deben estar físicamente en el proyecto SDK, ya sea en la raíz o en alguna carpeta, por lo que los enlaces a los .sdkarchivos en el proyecto SQL Server no funcionarán. En teoría, debería ser posible copiar estos archivos con una condición previa a la compilación, pero por alguna oscura razón, esto no funcionaba para mí. Intenté también tener los .sqlarchivos en el proyecto SDK y vincularlos al proyecto de SQL Server, pero eso rompería fácilmente el enlace con el Explorador de objetos de SQL Server, por lo que decidí eliminar esto también.

ccoutinho
fuente