Microsoft.WebApplication.targets non è stato trovato sul server di compilazione. Qual è la tua soluzione?


410

Cercare di compilare il mio progetto sul server di generazione mi dà il seguente errore:

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.

Ho risolto questo problema alcuni mesi fa, con l'installazione di Visual Studio 2010 su Build Server. Ma ora sto installando un nuovo server da zero e voglio sapere se esiste una soluzione migliore per risolvere questo problema.


1
I progetti di applicazioni Web sono obsoleti? Mi chiedo quale sia la logica per richiedere le vecchie versioni di Visual Studio per costruirle?
brianary

1
Più precisamente, distribuisci effettivamente tramite il server di build? ad es. no, ho anche un progetto di installazione web separato nella soluzione ... e vuole ancora questa cosa insanguinata ... answer = rimuoverlo dal file proj! facile.
Paul Zahra,


1
Risolto sostituendo <Import Project="..\Packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />il percorso con $(VSToolsPath):<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
GJ

Risposte:


207

Per rispondere al titolo della domanda (ma non alla domanda sull'output che stai ricevendo):

La copia della seguente cartella dal tuo computer di sviluppo al tuo server di build risolve questo problema se si tratta solo di applicazioni web

C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

Rimuovi x86 in base a come si interrompe la tua build. Se hai altri tipi di progetto, probabilmente dovrai copiare l'intera cartella msbuild.


11
Questo ha funzionato per m2 con un progetto VS2012, dopo aver sostituito v10.0 a v11.0
DenNukem il

2
non possiamo semplicemente installare gli strumenti di MSBuild invece di questo? microsoft.com/en-us/download/confirmation.aspx?id=40760
user20358

1
Purtroppo, l'installazione degli strumenti di MSBuild non è sufficiente per creare progetti che si compilano bene in VisualStudio 2013
Michael Shaw,

Ho dovuto copiare la cartella Web su v11.0 per farlo funzionare dopo aver installato VS2013, mancava lì. Potrebbe essere compilato in VS ma non direttamente tramite MSBUILD.
Martin Braun,

9
ha lavorato per VS2017. basta copiare C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ vXX.0 \ WebApplications in C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ WebApplications
jokab

95

La creazione e la pubblicazione di WAP non è supportata se VS non è installato. Detto questo, se davvero non vuoi installare VS, dovrai copiare tutti i file in %ProgramFiles32%\MSBuild\Microsoft\.

Sarà necessario installare anche lo strumento di distribuzione Web . Penso sia così.


4
Detto - vedi sotto la risposta di dansomething - la tua risposta è corretta? Anche l'installazione del pacchetto VS Shell 2010 integrato e .NET SDK non installeranno correttamente il supporto ai progetti di applicazioni Web?
Adam,

@SayedIbrahimHashimi devi registrare le DLL con il GAC se esegui una copia manuale delle cartelle?
TheOptimusPrimus

E che dire di Microsoft.TextTemplating.targets? Cosa devo fare per inserirli nella loro cartella? C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0
Sviluppatore

@ClarkKent, scusa se non riesco a parlare con il file TextTemplating. Non ho familiarità con quelli.
Ha detto Ibrahim Hashimi il

77

UPD: a partire da VS2017, c'è un carico di lavoro in Build Tools che elimina completamente questo problema. Vedi la risposta di @SOReader .

Se preferisci non modificare nulla sul server di compilazione e desideri comunque che il progetto venga compilato direttamente dal controllo del codice sorgente, potrebbe essere una buona idea mettere i file binari richiesti nel controllo del codice sorgente. Dovrai modificare la sezione delle importazioni nel tuo file di progetto in questo modo:

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

La prima riga è l'importazione effettiva dalla nuova posizione relativa alla directory della soluzione. La seconda è una versione disattivata ( Condition="false") della riga originale che consente a Visual Studio di considerare ancora il progetto come un valido progetto di applicazione Web (questo è il trucco che VS 2010 SP1 fa da solo).

Non dimenticare di copiare la C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplicationsa BuildTargetscartella sotto il vostro controllo del codice sorgente.


Questa soluzione ha funzionato per me ed è stata davvero l'opzione migliore nel mio caso. Questo perché non ho accesso al server di build. Sto usando il bambù elastico di Atlassian che gira su un nuovo server per fungere da server di build. A prima vista non sembra che queste AMI includano gli obiettivi delle applicazioni Web ?? Non ha senso per me, ma è così che sembra.
Cody Clark,

1
Questo è un buon approccio, ma questa modifica richiede che ogni file csproj sia cambiato. È complicato aggiungere nuovi progetti alla soluzione. Naturalmente può essere risolto con modelli di progetto personalizzati, ma comunque .. Comunque, questa risposta mi ha indicato la giusta direzione. Grazie!
100

76

In questo momento, nel 2017, è possibile installare i redist di WebApplication con MSBuildTools. Vai a questa pagina che scaricherà MSBuild 2017 Tools e durante l'installazione fare clic Web development build toolsper installare anche questi target: inserisci qui la descrizione dell'immagine

Ciò comporterà l'installazione di librerie mancanti C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationsper impostazione predefinita


2
Sono abbastanza sorpreso dal fatto che il mio bambino di cinque anni stia impacchettando le librerie nel controllo del codice sorgente e che le modifiche stiano ancora ottenendo voti anche oggi, mentre questa è una risposta pronta all'uso.
Andriy K,

2
@AndriyK La tua soluzione è un po 'diversa da quella che ho suggerito e capisco perché qualcuno potrebbe preferire la tua alla mia ... a meno che non sia solo pigrizia; D
SOReader

2
Per rendere questo più generale, per le versioni future di Visual Studio, è possibile scaricare gli strumenti di compilazione più recenti da visualstudio.microsoft.com/downloads Scorrere la pagina verso il basso e nella parte inferiore espandere la sezione "Strumenti per Visual Studio", quindi scaricare la " Strumenti di compilazione per Visual Studio ". Attualmente questi sono per VS 2017, ma presumo che sarà lo stesso per le versioni future. A proposito, se hai bisogno del percorso di msbuild.exe per il tuo strumento CI (ad esempio Jenkins), per VS 2017 verrà installato in C: \ Programmi (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ msbuild.exe.
Simon Tewsi,

2
Il modo per farlo compatibile con build-server (leggi: riga di comando) è choco install visualstudio2017-workload-webbuildtools.
Paul Hicks,

1
Si noti inoltre che il pacchetto "sul web strumenti di sviluppo costruire" , Microsoft.VisualStudio.Workload.WebBuildToolspuò essere installato tramite la riga di comando chiamando vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools. Aggiungi --passiveper non richiedere l'intervento dell'utente.
Wai Ha Lee,

70

È inoltre possibile utilizzare il pacchetto NuGet MSBuild.Microsoft.VisualStudio.Web.targets , facendo riferimento a essi nei progetti di Visual Studio, quindi modificare i riferimenti come suggerisce Andriy K.


2
È impossibile da usare perché devo prima aprire la soluzione ma non posso a causa dell'errore.
Sviluppatore

Se nella soluzione è presente più di un progetto, si dovrebbe comunque essere in grado di 1. aprire la soluzione - ignorare che il progetto Web non viene caricato; 2. aggiungere il riferimento nuget; 3. adottare uno degli approcci indicati in seguito; puoi modificare manualmente il file di progetto o sovrascrivere la variabile env.VSToolsPath in TeamCity.
Damon,

1
si tratta di un pacchetto MS nuget rilasciato ufficialmente o qualcuno l'ha appena creato?
Simon_Weaver,

meravigliosa soluzione - funziona per diverse versioni di VS. Avevo bisogno di modificare il file .csproj, YMMV
Jonno,

39
Non è un pacchetto Microsoft nuget rilasciato ufficialmente. Lo so perché l'ho creato.
mak

54

Sulla base di questo post qui puoi semplicemente scaricare il pacchetto ridistribuibile (integrato) di Microsoft Visual Studio 2010 Shell e le destinazioni sono installate.

Ciò evita la necessità di installare Visual Studio sul server di compilazione.

Ho appena provato questo ora e posso verificare che funzioni:

Prima:

errore MSB4019: il progetto importato "C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets" non è stato trovato. Confermare che il percorso nella dichiarazione sia corretto e che il file esista sul disco.

Dopo l'installazione:

[Costruisce correttamente]

Questa è una soluzione di gran lunga migliore rispetto all'installazione di Visual Studio su un server di compilazione, ovviamente.


7
Questa è la soluzione IMO più semplice e più semplice. Sto usando VS 2013 e ho scoperto che Visual Studio 2013 Shell (isolato) ridistribuibile era ciò che funzionava (quello integrato non si installava a causa della dipendenza da quello isolato).
Matt Miller,

@MatthewSkelton - Qual è il significato di build server ?
Mohammed Zameer,

2
@BountyMan - un server di build è un server che esegue o controlla build del software di integrazione continua (CI). Esempi: Jenkins, TeamCity, CruiseControl, ecc.
Matthew Skelton,

3
Sfortunatamente con VS v14.0, il modo di installare il pacchetto è tramite nuget ma poiché il mio problema era che il server di build non aveva VS installato (solo MSBuild), l'installazione del pacchetto si è rivelata pressoché impossibile. Ho passato ore a armeggiare con PowerShell e varie installazioni di Nuget supportate a metà prima di copiare semplicemente la cartella dal mio PC al server.
pasx,

1
@pasx Se il messaggio di errore contiene "v14" puoi invece installare Visual Studio 2015 Isolated Shell, ha funzionato per me - visualstudioextensibility.com/downloads/vs-shells (sotto "Scarica URL"; c'è un sondaggio obbligatorio, divertiti!)
Dunc,

38

L'ultimo Windows SDK, come menzionato sopra, oltre al "pacchetto ridistribuibile (integrato) della shell di Microsoft Visual Studio 2010" per Microsoft.WebApplication.targets e "GDR R2 di Database Edition 2008 di Microsoft Visual Studio Team System" per Microsoft.Data.Schema .SqlTasks.targets dovrebbe alleviare la necessità di installare Visual Studio 2010. Tuttavia, l'installazione di VS 2010 potrebbe effettivamente essere meno globale da scaricare e meno lavoro alla fine.


Cordiali saluti - Se stai provando a costruire progetti Sql su un server di build senza installare il VS completo, sei sfortunato con il programma di installazione GDR R2 di Team System 2008 Database Edition menzionato qui. Le sue pre-richieste sono Visual Studio Team System 2008 Database Edition SP1 (inglese) o Visual Studio Team System 2008 Suite SP1 (inglese) E Visual Studio 2008 Service Pack 1. Sembra tuttavia che sia possibile copiare SqlServer.targets da .NET Framework \ la directory v4 e il msbuild di TeamData indirizzano i file da \ program files \ msbuild \ microsoft \ visual studio \ v10.0 \ e il tuo csprojs costruirà.
Ethan J. Brown,

Non è sicuramente la soluzione più carina, ma per me il tempo è il più importante. Copiare semplicemente la directory MSBuild mi porta solo ad altri problemi.

21
Questa è una risposta davvero importante perché se sei uno sviluppatore indipendente che configura un server di build per un client, non vuoi che il client debba mantenere una licenza di Visual Studio per poter costruire il proprio software.
thelsdj,

Avevo solo bisogno del pacchetto integrato shell VS2010 e EntLib 5 per far costruire il mio. Non avevo bisogno di Team System.
Robin Winslow,

1
Shell VS 2010 non è più disponibile al link "La risorsa che stai cercando è stata rimossa, il suo nome è stato cambiato o è temporaneamente non disponibile".
kristianp,

22

Aggiungi dipendenza tramite NuGet e imposta un parametro di costruzione

Obiettivo: nessuna modifica / installazione necessaria per gli agenti di compilazione

Ho adottato qui un approccio ibrido all'approccio NuGet di Lloyd , basato sull'impegnativa soluzione di dipendenze binarie di Andrik.

Il motivo è che voglio poter aggiungere nuovi agenti di build senza doverli preconfigurare con elementi come questo.

  1. Su un computer con Visual Studio, apri la soluzione; ignorare che il progetto Web non riesce.
  2. Nel gestore pacchetti NuGet, aggiungi MSBuild.Microsoft.VisualStudio.Web.targets , come menzionato da Lloyd.
  3. Questo risolverà i file binari [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
    1. Puoi copiarli in una cartella di riferimenti e confermare,
    2. O semplicemente usali dove sono. Ho scelto questo, ma avrò a che fare con il numero di versione nel percorso più avanti.

Nella versione 7, ho fatto quanto segue. Questo potrebbe non essere stato necessario e sulla base dei commenti non è assolutamente necessario ora. Si prega di vedere i commenti qui sotto.

  1. Successivamente, nella configurazione build di TeamCity, aggiungi un build Paramenter per env.VSToolsPathe impostalo nella cartella VSToolsPath; ero solito..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath

8
non è necessario eseguire il passaggio 4, se si sostituisce semplicemente l'elemento <Import> nel file di progetto con questo:<Import Project="..\..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.12.0.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />
knocte

Questa dovrebbe essere la risposta accettata ... e il punto 4 dovrebbe essere eliminato.
Izzy,

@Izzy grazie, hai fatto invece il commento come indicato da Knocte? Non uso TC da alcuni anni, versione 7 iirc.
Damon,

@Damon Sto usando Jenkins e non TC, quindi potrebbe essere il motivo per cui non avevo bisogno del tuo ultimo punto.
Izzy,

21

Quando si crea sul server build / CI, disattivare l'importazione del Microsoft.WebApplication.targetstutto specificando /p:VSToolsPath=''. Ciò, in sostanza, renderà falsa la condizione della seguente riga:

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


Ecco come si fa in TeamCity:

inserisci qui la descrizione dell'immagine


Gli obiettivi di creazione sono necessari se si utilizza il meccanismo "Pubblica" di Visual Studio. In questo modo la compilazione può continuare e completare, ma potrebbe essere incompleta.
Starlocke,

14

Se si esegue la migrazione di Visual Studio 2012 al 2013, aprire il file di progetto * .csproj con edior.
e controlla l'elemento ToolsVersion del tag 'Project'.

Cambia il suo valore da 4.0 a 12.0

  • A partire dal

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

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

Oppure se compilate con msbuild, specificate semplicemente la proprietà VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0

Fonte della soluzione


4
Aggiunta di /p:VisualStudioVersion=12.0 a MSBuild Gli argomenti nella definizione di build di TFS 2013 (per una soluzione creata in Visual Studio 2013) hanno funzionato per me. Per qualche motivo cercherebbe i file in una cartella v11.0 senza alcun parametro.
Sacha K,

3
Questa soluzione ha funzionato per me, ho usato quel comando:msbuild /p:Platform=x86 /p:VisualStudioVersion=12.0
E.Meir

9

Sembra che la nuova versione di msbuild non sia fornita con Microsoft.WebApplication.targets. Per risolvere il problema, devi aggiornare il tuo file csproj in questo modo:

1) Modifica l'app web csproj (tasto destro). Trova la sezione in csproj verso il basso relativa agli strumenti di costruzione. Dovrebbe apparire così.

<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) Devi aggiungere una riga VSToolsPath sotto il tag VisualStudioVersion in modo che appaia così

<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" />  

Link di riferimento: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/


8

Questo è tutto ciò di cui hai bisogno. Solo 103 MB. Non installare tutto

inserisci qui la descrizione dell'immagine


Come posso mettere un segno di spunta su quel modulo, senza installare nulla?
Christian,

5

Ho trovato questo su MS Connect :

Sì, è necessario installare Visual Studio 2010 sul computer di compilazione per creare progetti di database. Ciò non richiede una licenza aggiuntiva di Visual Studio.

Quindi, questa è l'unica opzione che ho per ora.


2
Il collegamento sembra essere rotto.
Disilluso il

2

La mia soluzione è un mix di diverse risposte qui.

Ho controllato il server di compilazione e l'SDK di Windows 7 / NET4.0 era già installato, quindi ho trovato il percorso:

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

Tuttavia, su questa linea:

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

$ (MSBuildExtensionsPath) si espande in C: \ Programmi \ MSBuild che non ha il percorso.

Quindi quello che ho fatto è stato creare un link simbolico, usando questo comando:

mklink / J "C: \ Programmi \ MSBuild \ Microsoft \ VisualStudio" "C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio"

In questo modo $ (MSBuildExtensionsPath) si espande in un percorso valido e non sono necessarie modifiche nell'app stessa, solo nel server di build (forse si potrebbe creare il link simbolico ogni build, per assicurarsi che questo passaggio non venga perso e sia "documentato" ").


2

Ho risolto questo aggiungendo
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"

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


2

Ho provato un sacco di soluzioni, ma alla fine questa risposta ha funzionato per me: https://stackoverflow.com/a/19826448/431522

Fondamentalmente implica la chiamata a MSBuild dalla directory MSBuild, anziché dalla directory di Visual Studio.

Ho anche aggiunto la directory MSBuild al mio percorso, per semplificare la codifica degli script.


2

Chiunque venga qui per Visual Studio 2017. Ho avuto il problema simile e non sono riuscito a compilare il progetto dopo l'aggiornamento a 15.6.1. Ho dovuto installare gli strumenti di MSBulild ma l'errore era ancora lì.

Sono stato in grado di risolvere il problema copiando la v14.0cartella C:\Program Files (x86)\MSBuild\Microsoft\VisualStudionella stessa cartella di v15.0e che ha risolto tutti gli errori. Quindi ora la mia struttura di cartelle appare come di seguito, dove entrambe le cartelle contengono lo stesso contenuto.

inserisci qui la descrizione dell'immagine


2

Se stai usando MSBuild, come nel caso di un server di build, ciò che ha funzionato per me è:

Modifica quanto segue:

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

per:

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

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

Spero che questo aiuti qualcuno.


per menzionare, le modifiche dovrebbero essere apportate ai file .csproj, vbproj offensivi.
Colin Q,

0

Nel caso in cui si stia tentando di distribuire un progetto utilizzando VSTS, il problema potrebbe essere collegato al controllo dell'opzione "Contenitore di Windows ospitato" anziché "Hosted VS2017" (o 18, ecc.):

inserisci qui la descrizione dell'immagine


0
  • Dopo l'installazione degli strumenti MSBuild da parte di Microsoft, definire il percorso MSBuild nella variabile d'ambiente, in modo che possa essere eseguito da qualsiasi percorso.
  • Modifica il file .csproj in qualsiasi editor di blocco note come notepad ++ e commenta il file
  • Verificare i seguenti elementi, ->
    • Assicurati di utilizzare l'importazione una sola volta, scegli quale funziona.
    • Assicurarsi che sull'unità sia presente la seguente cartella, "C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0" o la versione a cui fa riferimento la destinazione MSBuild in "C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ applicazioni web \ Microsoft.WebApplication.targets"
    • Dal prompt dei comandi, eseguire il comando seguente, per verificare

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


0

Stavo riscontrando questo problema durante la creazione di un progetto SQL Server su una pipeline CI / CD. In effetti, lo avevo anche localmente e non sono riuscito a risolverlo.

Ciò che ha funzionato per me è stato l'utilizzo di un SDK di MSBuild , in grado di produrre un pacchetto di applicazioni di livello dati SQL Server ( .dacpac) da un set di script SQL, il che implica la creazione di un nuovo progetto. Ma volevo mantenere il progetto SQL Server, in modo da poterlo collegare al database live tramite SQL Server Object Explorer su Visual Studio. Ho preso i seguenti passaggi per farlo funzionare:

  1. Ho mantenuto il mio progetto SQL Server con .sql script database.
  2. Creato un progetto di libreria di classi .NET Standard 2.0, assicurandosi che il framework di destinazione fosse .NET Standard 2.0, secondo le linee guida nel link sopra.
  3. Impostare i contenuti di .csprojcome segue:

    <?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. Ho scelto Sql140 come versione di SQL Server perché sto usando SQL Server 2019. Controlla questa risposta per scoprire il mapping alla versione che stai utilizzando.

  5. Ignora il progetto SQL Server durante la compilazione, in modo che smetta di interrompersi localmente (si basa su Visual Studio, ma non riesce su VS Code).

  6. Ora dobbiamo solo assicurarci che i .sqlfile si trovino all'interno del progetto SDK quando viene creato. L'ho raggiunto con una semplice routine PowerShell sulla pipeline CI / CD che avrebbe copiato i file dal progetto SQL Server al progetto SDK:

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

PS: i file devono trovarsi fisicamente nel progetto SDK, nella cartella principale o in alcune cartelle, quindi i collegamenti ai .sdkfile nel progetto SQL Server non funzioneranno. In teoria, dovrebbe essere possibile copiare questi file con una condizione pre-build, ma per qualche oscura ragione, questo non funzionava per me. Ho anche cercato di avere i .sqlfile sul progetto SDK e di collegarli al progetto SQL Server, ma ciò avrebbe facilmente interrotto il collegamento con Esplora oggetti di SQL Server, quindi ho deciso di abbandonare anche questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.