Errore di build VS2013 esterno "errore MSB4019: il progetto importato <percorso> non è stato trovato"


201

Sto costruendo un progetto attraverso la riga di comando e non all'interno di Visual Studio 2013. Nota, avevo aggiornato il mio progetto da Visual Studio 2012 a 2013. Il progetto si sviluppa bene all'interno dell'IDE. Inoltre, ho prima disinstallato completamente VS2012, riavviato e installato VS2013. L'unica versione di Visual Studio che ho è 2013 Ultimate.

ValidateProjects:
    39>path_to_project.csproj(245,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 <Import> declaration is correct, and that the file exists on disk.
    39>Done Building Project "path_to_project.csproj" (Clean target(s)) -- FAILED.

Ecco le due righe in questione:

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

La seconda riga originale era v10.0, ma l'ho cambiata manualmente in v12.0.

$ (VSToolsPath) si allunga da quello che vedo nella cartella v11.0 (VS2012), che ovviamente non c'è più. Il percorso dovrebbe essere stato alla v12.0.

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\

Ho provato a specificare VSToolsPath nella mia tabella delle variabili di ambiente di sistema, ma l'utilità di generazione esterna utilizza ancora v11.0. Ho provato a cercare nel registro e non ho trovato nulla.

Purtroppo, non vedo alcun modo semplice per ottenere l'esatta riga di comando utilizzata. Uso uno strumento di compilazione.

Pensieri?



Nel mio caso, ho dovuto specificare VisualStudioVersion corretto nell'evento build che stava costruendo con la destinazione WebPublish.
user145400

Risposte:


250

Ho avuto lo stesso problema e ho trovato una soluzione più semplice

È dovuto al fatto che Vs2012 ha aggiunto quanto segue al file csproj:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

Puoi rimuovere in modo sicuro quella parte e la tua soluzione verrà costruita.

Come ha sottolineato Sielu, è necessario assicurarsi che il file .proj inizi <Project ToolsVersion="12"altrimenti, la prossima volta che si apre il progetto con Visual Studio 2010, verrà aggiunto nuovamente il nodo rimosso.

Altrimenti, se è necessario utilizzare webdeploy o si utilizza un server di compilazione, la soluzione sopra non funzionerà ma è possibile specificare la VisualStudioVersionproprietà nello script di compilazione:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

o modifica la definizione di build:

modifica definizione build per specificare la proprietà <code> VisualStudioVersion </code>


1
Ho ricevuto l'errore usando msbuild dal prompt dei comandi. La rimozione di questa parte dal file di progetto ha risolto il problema.
Peter Hedberg,

7
Ho usato questa risposta e ha funzionato solo se mi sono assicurato che il mio file * proj fosse iniziato con <Project ToolsVersion = "12" Prima di avere <Project ToolsVersion = "4" e ogni volta che aprivo il progetto in VS aggiungeva di nuovo i due nodi (vale a dire che ha migrato nuovamente il progetto all'ultima versione).
Sielu

3
@giammin, ho già trovato la soluzione. NON rimuovere la sezione dal file del progetto. Imposta la versione degli strumenti corretta nella definizione della build. Questo è molto facile da fare. Apri la definizione di build e vai alla pagina "Elaborazione". Quindi nel gruppo "3. Avanzate" hai una proprietà chiamata "Argomenti MSBuild". Inserire il parametro lì con la seguente sintassi "/p:VisualStudioVersion=12.0". Ovviamente senza virgolette. Se hai più parametri, separali con uno spazio e non una virgola. La configurazione che hai suggerito di rimuovere è utilizzata da altre parti di Visual Studio nei tuoi processi di compilazione ...
Ralph Jansen,

9
La rimozione di quella linea sembra interrompere Web Deploy
Colin Pear,

4
Ho avuto lo stesso problema risolto utilizzando la proprietà /p:VisualStudioVersion=12.0 come raccomandato sopra. Grazie
Randeep

70

Ho avuto anche questo e puoi risolverlo impostando la versione degli strumenti nella definizione della build.

Questo è molto facile da fare. Apri la definizione di build e vai alla pagina " Elaborazione ". Quindi sotto il gruppo " 3. Avanzate " hai una proprietà chiamata " Argomenti MSBuild ". Inserire il parametro lì con la seguente sintassi

/p:VisualStudioVersion=12.0 

Se hai più parametri, separali con uno spazio e non una virgola.


1
Abbiamo appena completato un aggiornamento da TFS 2005 a TFS 2013 e questo è stato il nostro ultimo ostacolo. Questo ha sicuramente funzionato per noi e mi ha salvato dal strapparmi i capelli. Grazie mille! +1.
Simon Whitehead,

2
Questo articolo di Sayed Ibrahim Hashimi descrive il problema in Visual Studio 2010/2012. Una build da riga di comando utilizza il formato di file sln versione -1 come VisualStudioVersion. È possibile sovrascrivere questo valore dalla riga di comando come descritto da Ralph o come proprietà dell'attività MSBuild da uno script di compilazione. Ho avuto lo stesso problema con Visual Studio 2013 e l'override di VisualStudioVersion ha risolto il problema.
Mcdon,

1
Questo ha funzionato anche per noi. Abbiamo anche considerato di modificare il modello di build stesso, descritto qui , che potrebbe essere un'opzione migliore se si dispone di dozzine di definizioni di build.
JamesQMurphy,

questo ha funzionato per me. Ho cancellato nei file csproj qualsiasi riferimento a visualstudioversion e poi ho aggiunto l'argomento
msbuild

51

Ciò è strettamente correlato, ma può o meno risolvere il problema specifico dei PO. Nel mio caso stavo cercando di automatizzare la distribuzione di un sito di Azure usando VS2013. La creazione e la distribuzione tramite VS funziona, tuttavia, utilizzando MSBuild ha mostrato un errore simile attorno agli "obiettivi". Risulta che MSBuild è diverso in VS2013 e ora fa parte di VS e non di .Net Framework (vedi http://timrayburn.net/blog/visual-studio-2013-and-msbuild/ ). Fondamentalmente, utilizzare la versione corretta di MSBuild:

VECCHIO, VS2012

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

NUOVO, VS2013

C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe

Più recente, VS2015

C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe

Ancora più nuovo, VS2017 (non completamente testato ma scoperto - hanno spostato un po 'le cose)

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe

Questo mi ha risolto. Inoltre, una risposta simile per una domanda simile qui: stackoverflow.com/a/19826448/61569
Anthony F

22

Ho appena ricevuto una risposta da Kinook, che mi ha dato un link :

Fondamentalmente, ho bisogno di chiamare il seguente prima di bulding. Immagino che Visual Studio 2013 non registri automaticamente prima l'ambiente, ma il 2012 l'ha fatto, o l'ho fatto e ho dimenticato.

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86

Spero che questo post aiuti qualcun altro.


Grazie mille, questo ha risolto il mio problema quando si costruisce nodeJS node-gypil Cpp default.propsnon è stato trovato! +1
Pogrindis,

21

la soluzione di giammin è parzialmente errata. È NON NECESSARIO rimuovere tale intera PropertyGroup dalla vostra soluzione. In tal caso, la funzionalità "DeployTarget = Package" di MSBuild smetterà di funzionare. Questa funzione si basa sull'impostazione di "VSToolsPath" .

<PropertyGroup>
  <!-- VisualStudioVersion is incompatible with later versions of Visual Studio.  Removing. -->
  <!-- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> -->
  <!-- VSToolsPath is required by MSBuild for features like "DeployTarget=Package" -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
...
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

10

Ho avuto questo problema per i nostri obiettivi di FSharp (FSharpTargetsPath era vuoto).

Molti dei percorsi sono creati con riferimento alla versione VS.

Per vari motivi, la nostra build funziona con privilegi di sistema e la variabile di ambiente "VisualStudioVersion" è stata impostata (solo dall'installer VS 2013) a livello di "utente" - il che è abbastanza giusto.

Assicurarsi che la " VisualStudioVersion" variabile d'ambiente sia impostata su " 12.0" al livello (Sistema o Utente) in cui si sta eseguendo.


5
Questo è probabilmente uno scenario comune quando si esegue un server di compilazione (come CruiseControl o TeamCity), in cui il servizio viene eseguito con un determinato account di servizio che potrebbe anche non avere autorizzazioni desktop interattive. Questo suggerimento ha risolto il problema per me (VS 2013 installato su un'installazione pulita di Server 2008 R2, con CruiseControl.NET)
David Keaveny,

Dove posso vedere il mio "VisualStudioVersion"?
WEFX,

@WEFX visualizza le variabili di ambiente selezionando Systemdal Pannello di controllo, quindi seleziona Advanced system settingse infine fai clicEnvironment Variables
Scott

6

L'esecuzione nella riga di comando risolverà anche il problema. SETX VisualStudioVersion "12.0"


Questo ha funzionato per me ed è stato preferibile modificare il file di progetto.
Sean,

4

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

Questo è il valore 4.0
Lo fai 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


1
ToolsVersion non deve essere l'unica variabile per correggere questo messaggio di errore perché ho visto un progetto con ToolsVersion che non è stato possibile compilare correttamente.
Patrick Desjardins,

2

Stavo usando un'utilità di generazione esterna. Pensa a qualcosa come Ants, se capisco correttamente il prodotto, solo una versione commerciale. Ho dovuto contattare il produttore per la risposta.

A quanto pare, c'è una macro globale nel progetto, DEVSTUDIO_NET_DIR. Ho dovuto cambiare il percorso in .Net lì. Elencano varie versioni di Visual Studio come "Azioni", che attraverso di me sono disattivate, ma tutte le strade portano a quell'unica variabile globale dietro le quinte. Vorrei elencarlo come un difetto nei confronti del prodotto, se avessi la mia strada, a meno che non mi manchi qualcosa nella mia comprensione. Correggere il percorso lì risolto il problema di compilazione.


2

Ho installato Visual Studio 2013. Questo ha funzionato per me:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' != ''">12.0</VisualStudioVersion>`
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

Quindi ho cambiato la condizione da ==a !=e il valore da 10.0a 12.0.


2

Ho avuto un problema simile. Tutte le soluzioni proposte risolvono il problema ma non risolvono la fonte dell'errore. La soluzione @giammin non deve essere applicata se si utilizza tfs build server in quanto si è appena arrestata la funzionalità di pubblicazione. @ soluzione cat5dev - risolve il problema ma non ne risolve l'origine.

Sono quasi sicuro che stai usando un modello di processo di compilazione per VS2012 come ReleaseDefaultTemplate.11.1.xaml or DefaultTemplate.11.1.xaml questi modelli di compilazione sono stati creati per VS2012 e $ (VisualStudioVersion) impostato su 11.0

È necessario utilizzare un modello di processo di compilazione per VS2013 ReleaseTfvcTemplate.12.xaml or TfvcTemplate.12.xaml che ha $ (VisualStudioVersion) impostato su 12.0

Funziona senza alcuna modifica nel file di progetto.


2

Ho anche avuto lo stesso errore .. Ho fatto questo per risolverlo

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" />

cambia in

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

ed è fatto.


2

Nel mio caso ho solo commentato sotto la riga aprendo il file .csproj e ho fatto il trucco

.<!-- <Import Project="..\PRPJECTNAME.targets" /> -->

Il mio problema potrebbe essere diverso ma sono trascinato qui, ma questo può aiutare qualcuno.

Ho scelto un singolo progetto Web dalla mia soluzione e ho cercato di aprirlo come progetto autonomo che stava causando problemi, dopo che diamine sono in grado di risolvere il problema.


2

Utilizzare la versione corretta di MSBuild. Impostare la variabile di ambiente su:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin

Questo funzionerà anche per i progetti VS 2019

In precedenza lo stavamo impostando su C:\Windows\Microsoft.NET\Framework\v4.0.30319


Ho usato "C: \ Programmi (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ MSBuild.exe" anziché "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild. exe "e ha funzionato
ELKALAKHI Mohammed il

Sì, sto usando un progetto SSDT (.sqlproj), con VisualStudioVersion = 14.0 nel file di progetto. Ho installato il core 3.1, che ha impostato il mio ambiente per gli obiettivi a Dio solo sa dove. Usando msbuild nella cartella che hai suggerito ha funzionato come un incantesimo!
Matthew Beck,

1

Nel mio caso, l'ambiente di sviluppo è VS2013 e sto usando TFS 2010. Build è stato progettato per .NET 4.5.1. Stavo installando la compilazione automatica per CI. ogni volta che ho provato soluzioni alternative menzionate in precedenza, come rimuovere completamente il gruppo di proprietà o sostituire alcune righe, ecc. la mia build avveniva in TFS ma la mia pubblicazione in azzurro non riusciva con "MSDeploy" o talvolta con errori diversi. Non sono stato in grado di raggiungere entrambi contemporaneamente.

Quindi alla fine ho dovuto passare l'argomento MSBuild per risolvere il problema.

Vai a Modifica definizione build> Processo> 3. Avanzate> Argomenti MSBuild (impostato su) /p:VisualStudioVersion=12.0

Ha funzionato per me.


1

Dovresti copiare la cartella WebApplications da C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ in C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \


Oppure copia solo il file Microsoft.WebApplication.targets da un percorso in cui è installato Visual Studio 2013.
ThatBlairGuy

0

troverai

C:\Program Files  (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets 

nel file csproj per il quale viene visualizzato questo errore. Basta rimuoverlo da csproj e quindi compilare.


0

Solo una cosa deve essere fatta per risolvere il problema: aggiornare TeamCity alla versione 8.1.xo successiva perché il supporto per Visual Studio 2012/2013 e MSBuild Tools 2013 è stato introdotto solo in TeamCity 8.1. Dopo aver aggiornato TeamCity, modifica l'impostazione della versione di MSBuild Tools nel tuo passaggio di costruzione e il problema scompare. Per maggiori informazioni leggi qui: http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html


0

Io - niente mi ha aiutato a cambiare il valore v11.0 della variabile VisualStudioVersion in v10.0. La modifica della variabile nel file .csproj no. Impostandolo tramite il comando promt no. Eccetera...

Ho finito per copiare la mia cartella locale di quella versione specifica (v11.0) sul mio server di build.


0

Avevo provato tutte le soluzioni di cui sopra e ancora nessuna fortuna. Avevo sentito le persone installare Visual Studio sui loro server di build per risolverlo, ma avevo solo 5 GB di spazio libero, quindi ho appena copiato C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio sul mio server di build e l'ho chiamato un giorno . In seguito ha iniziato a lavorare, utilizzando team city 9.xe Visual Studio 2013.


0

Basato su TFS 2015 Build Server

Se si contesta questo errore ... Error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.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.

Apri il .csprojfile del progetto indicato nel messaggio di errore e commenta la sezione seguente

<!-- <PropertyGroup> --> <!-- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> --> <!-- <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> --> <!-- </PropertyGroup> -->


0

Ho riscontrato questo errore quando installo alcuni componenti VS. Purtroppo nessuna di queste risposte non mi ha aiutato. Uso TFS per lo sviluppo dei comandi e non ho i permessi per modificare la definizione di build. Ho risolto questo problema eliminando le variabili di ambiente che chiamavano VS110COMNTOOLSe VS120COMNTOOLS. Penso che sia stato installato con i miei componenti VS.


0

Ho scoperto che mi mancava la cartella WebApplications sul mio PC locale, che non avevo installato con Visual Studio 2017 come quando usavo il 2012.


0

Nel mio caso stavo usando la versione sbagliata di MSBuild.exe.

La versione che devi usare dipende dalla versione di Visual Studio che hai usato per creare il tuo progetto. Nel mio caso avevo bisogno di 14.0 (dopo aver usato Visual Studio 2015).

Questo è stato trovato su:

C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe

Puoi guardare sotto:

C:\Program Files (x86)\MSBuild

Per trovare altre versioni.

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.