v11.0 \ WebApplications \ Microsoft.WebApplication.targets non è stato trovato quando il file fa effettivamente riferimento a v10


84

Prima alcuni retroscena. Alla fine del 2012 abbiamo migrato la nostra soluzione vs2008 a vs2010, ma abbiamo ancora come target .NET 3.5. (Non so altro che l'ultimo e il più grande qui!)

Non abbiamo avuto problemi con questa configurazione fino a poche settimane fa, quando le persone hanno iniziato a ricevere questi errori:

"foo.csproj" (Rebuild target) (16:5) ->
  C:\...\foo.csproj(142,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.

La cosa interessante è che se guardi il file di progetto fa riferimento a v10, il che ha senso perché non usiamo Visual Studio 2012.

Questo errore ha colpito molti di noi contemporaneamente e anche su rami di codice più vecchi che non sono cambiati da mesi.

Sospetto che qualche aggiornamento sia stato inserito sulle nostre macchine che ha confuso le cose, ma non so cosa fare al riguardo.

La soluzione a breve termine è stata installare VS 2012 e non usarlo, ma spero in qualcosa di un po 'più pulito.


17
Ho scoperto che l'aggiunta di "/p:VisualStudioVersion=10.0" alla riga di comando di MSBuild fa sparire tutto questo, ma sembra ancora un hack.
drs9222

Risposte:


116

Ho riscontrato lo stesso problema con Visual Studio 2013. Si scopre che stavo utilizzando la vecchia versione di MSBuild, quella fornita con .NET Framework, dalla riga di comando. Microsoft sta ora rilasciando MSBuild come parte di Visual Studio stesso e anche come programma di installazione separato ( http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of- visual-studio.aspx ).

La soluzione era utilizzare la nuova versione di MSBuild.exe situata in C:\Program Files (x86)\MSBuild\12.0\Bin. Una volta fatto ciò, tutti gli errori dei target sono scomparsi.

MODIFICA 1

Come accennato nei commenti, ogni nuova versione di MSBuild porta con sé una nuova directory. Per Visual Studio 2015, usa C:\Program Files (x86)\MSBuild\14.0\Bin.

MODIFICA 2

Come accennato nei commenti, per Visual Studio 2017, utilizzare C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\MSBuild\15.0\Bin\MSBuild.exe.


1
Ho pubblicato una richiesta nel forum di TeamCity per incorporare il nuovo percorso (a la come vengono gestite le impostazioni di NuGet). Si spera che lo affrontino rapidamente.
David Peden

1
Il collegamento diretto nel post del blog al download degli strumenti separati non è più valido. Il collegamento corretto è: microsoft.com/en-us/download/details.aspx?id=40760 .
David Peden

1
E, proprio così, Jetbrains viene in soccorso con la versione 8.0.5. Post ufficiale del blog: teamcitydev.blogspot.com/2013/11/…
David Peden

1
Se hai script di build Powershell locali, puoi semplicemente aggiungere al tuo percorso: $env:Path = $env:Path + ";C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications"e usare v4 msbuild (potresti farlo anche sulla tua build box)
Chris S

4
Sì! Grazie - questa è la soluzione corretta.
Josh M.

53

Se hai un server di build che non ha VS2012 installato, puoi risolvere questo problema

a) installazione del pacchetto MSBuild.Microsoft.VisualStudio.Web.targets nella soluzione e

b) sostituendo questa riga nel file .csproj:

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

Con questa linea che punta al pacchetto nuget

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />

MODIFICARE

Come sottolinea @joedragons, la versione nella riga aggiornata dovrebbe corrispondere alla versione del pacchetto nuget, cioè sostituirla targets.11.0.2.1con targets.x.x.x.xper la versione corrente.


1
Allo stesso modo, ottimi consigli!
Kevin Obee

2
Grazie, ottima soluzione
Pavel

1
Forse ovvio ma la riga con cui sostituisci dovrebbe contenere la versione del pacchetto che installi. Quello che ho installato era 12.0.4 quindi quando ho inserito l'importazione sostitutiva, ho ricevuto lo stesso errore. Quando sono passato a ... Web.targets.12.0.4 \ ... tutto bene =) Grazie mille!
joedragons

2
Non hai più bisogno della parte b di questa risposta. Per qualche motivo SO ha rifiutato la mia modifica per rimuovere i dettagli non necessari.
bbodenmiller

1
grazie ho fatto lo stesso con l'ultima versione MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3
Ahmed Samir

23

Una semplice soluzione a questo problema:

Vai al seguente percorso:

C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio

Verrà visualizzata l'ultima versione V10.0, v11.0, v12.0 a seconda dell'installazione di Visual Studio 2010, 2012 o 2013.

Copia la WebApplicationscartella da una delle directory della versione più recente e incollala in un'altra.

I tuoi problemi dovrebbero essere risolti.


1
Questo IMO è la soluzione migliore e semplice :)
gideon

Ovviamente, è necessario che tu abbia effettivamente accesso per farlo sul server di compilazione.
Dave

1
... ma perché dobbiamo farlo manualmente? Grazie .. questo l'ha risolto per me in VS21017 (Per me era una nuova installazione solo con VS2017 - Ora penso che fosse perché non ho ancora installato IIS)
Piotr Kula

Funziona anche durante la copia su V14.0.
Uwe Keim


8

Wow. Abbiamo appena visto la stessa cosa accadere sulla nostra macchina di compilazione. Usiamo VS2010 e target .NET 4.0. I nostri file di progetto importano esplicitamente la versione v10.0 di questi target. Senza modifiche al codice, ieri la build andava bene e oggi sta fallendo con un reclamo su una versione v11.0 mancante. .NET Framework 4.5.1 è stato installato / aggiornato la scorsa notte su questa macchina di compilazione come aggiornamento automatico. Forzeremo la v10.0 con il parametro (o variabile env.), Ma questo ci ha sicuramente colto di sorpresa ...

AGGIORNAMENTO: La cosa ancora più strana è che sembra che la versione odierna di msbuild stia usando la prima riga del file sln per determinare quale VisualStudioVersion usare di default, mentre la versione di ieri no:

Format Version 12.00

Abbiamo testato la modifica manuale di questo a 11.00 e la build ha iniziato a funzionare di nuovo.

Nel nostro caso, anche se stiamo prendendo di mira e costruendo tutto per il 2010 / 4.0, alcuni sviluppatori si stanno preparando per VS2012 (poiché MS ha affermato che i file di progetto sono compatibili), e questa particolare soluzione è stata salvata l'ultima volta (mesi fa) in VS2012. Prima di oggi, questo non causava problemi.


1
Questo mi ha aiutato molto più della risposta più votata che sembra riguardare una situazione completamente diversa.
LambdaCruiser

Lo stesso qui @LambdaCruiser questa risposta ha aiutato molto. Ho guardato la cronologia del mio file .sln e anche se la seconda riga ha letto # Visual Studio 2010la prima riga finita, Format Version 12.00dato che a un certo punto ero passato a vs2012 ma sono passato avanti e indietro a vs2010. Come Wayne, questo problema si è verificato dopo aver eseguito l'aggiornamento di Windows sul server CI
wal

6

Ho avuto lo stesso problema. Risolto passando attraverso le soluzioni sopra elencate. Il problema è causato perché la versione appropriata di Visual Studio Tools (BuildTools) non è disponibile sul server di compilazione. Come giustamente indicato sopra, questo può essere risolto installando BuildTools ma non è l'opzione nel mio caso.

Ecco un'altra alternativa: usa Nuget

Install-Package MSBuild.Microsoft.VisualStudio.Web.targets -Version 14.0.0.3

Identifica il progetto di avvio e installa web.targets in base alla versione di Visual Studio in uso. Verranno modificati i seguenti file che includono le modifiche richieste

In packages.config:

<package id="MSBuild.Microsoft.VisualStudio.Web.targets" version="14.0.0.3" targetFramework="net45" />

In .csproj:

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props" Condition="Exists('..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props')" />

Spero che sia di aiuto!!! In bocca al lupo,

Saluti,


1
Risposta perfetta: elimina la necessità di eseguire la scimmia con il file csproj o di copiare cose sul server di compilazione. Ha funzionato su più versioni di Visual Studio e MSBuild 2017. Tuttavia, ho rimosso manualmente la riga "WebApplication.targets": nuget non l'ha rimossa automaticamente.
Gedas Kutka

3

Hack, ma risolto copiando: c: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications *. * In c: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications *. *


1

Ho ricevuto questo errore alla fine di novembre senza apportare modifiche alla configurazione della mia installazione di TeamCity o all'installazione di MSBuild o al codice sorgente. Sul mio server di build Visual Studio non è nemmeno installato e il passaggio da VS2010 a VS2012 è stato effettuato alla fine di agosto senza problemi al momento.

La mia versione di MSBuild è 4.0.30319.18408, il mio server di build è un Windows Server 2008 R2 SP1 con TeamCity v6.5.3.

Ho risolto il problema semplicemente copiando la cartella v11 da un altro server di compilazione che non era interessato.

La mia ipotesi è che ciò sia potuto accadere in due modi:

  1. Qualcosa è stato aggiornato che ha attivato la cancellazione della cartella v11. Potrebbe essere un aggiornamento di Windows a .NET o qualcosa del genere?

  2. Qualcosa è stato aggiornato che ha cambiato la mia configurazione TeamCity / MSBuild dall'utilizzo della v10 alla v11 e le build smettono di funzionare poiché la v11 non è mai esistita.

Ho ricevuto un aggiornamento a .NET Framework 4.5.1 il 3 dicembre, potrebbe essere questo il motivo?

Brgds

Jonas


0

Di recente sono rimasto bloccato con lo stesso problema. E la mia conclusione è che ogni versione di VS (v10, v11, v12) cambia il percorso della variabile di build, come MSBuildBinPath.

Quindi specificare la versione esatta di VS non è un trucco, perché potresti non avere nemmeno la versione appropriata dei file installata. Quindi è meglio specificare un parametro e utilizzare obiettivi che esistono sulla macchina.

In alcuni rari casi potrebbe essere necessario installare una versione specifica di VS e il pacchetto di distribuzione Web. Nel mio caso solo la versione era sufficiente per risolvere il problema.


0

Puoi aggiungere la proprietà VisualStudioVersion in questo modo:

<ItemGroup>
  <ProjectToBuild Include="$(MSBuildProjectDirectory)\..\MySolution.sln">
    <Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
  </ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>

0

Mentre stavo cercando come risolvere questo problema, quasi tutti hanno consigliato di copiare la cartella MSBUILD mancante o di installare alcuni SDK di qualche versione.

Fortunatamente, ho trovato questo post incredibilmente utile di Donovan Brown: http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!

In poche parole, l'idea è di configurare la versione di VisualStudio che la tua build dovrebbe usare nella tua Build Definition:

Fare clic con il pulsante destro del mouse -> "Modifica definizione build ..."

Vai a "Procss" -> "3. Avanzate"

e impostare "MSBuild Arguments" con

/p:VisualStudioVersion=12.0

Impossibile trovare "Modifica definizione build ..." in VS2019
Laser42
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.