Kesalahan membangun VS2013 eksternal "kesalahan MSB4019: Proyek yang diimpor <path> tidak ditemukan"

201

Saya membangun proyek melalui baris perintah dan tidak di dalam Visual Studio 2013. Catatan, saya telah memutakhirkan proyek saya dari Visual Studio 2012 hingga 2013. Proyek ini dibangun dengan baik di dalam IDE. Juga, saya benar-benar menghapus VS2012 terlebih dahulu, reboot, dan menginstal VS2013. Satu-satunya versi Visual Studio yang saya miliki adalah 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.

Inilah dua baris yang dipertanyakan:

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

Baris kedua asli adalah v10.0, tapi saya secara manual mengubahnya menjadi v12.0.

$ (VSToolsPath) memanjang dari apa yang saya lihat ke folder v11.0 (VS2012), yang jelas sudah tidak ada lagi. Path seharusnya ke v12.0.

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

Saya mencoba menentukan VSToolsPath di tabel variabel lingkungan sistem saya, tetapi utilitas build eksternal masih menggunakan v11.0. Saya mencoba mencari melalui registri dan yang muncul tanpa apa-apa.

Sayangnya, saya tidak melihat cara mudah untuk mendapatkan baris perintah yang tepat digunakan. Saya menggunakan alat membangun.

Pikiran?

Sarah Weinberger
sumber
Pertanyaan serupa di sini stackoverflow.com/questions/17433904/…
Anthony F
Dalam kasus saya, saya harus menentukan VisualStudioVersion yang benar dalam acara build yang dibangun dengan target WebPublish.
user145400

Jawaban:

250

Saya memiliki masalah yang sama dan menemukan solusi yang lebih mudah

Ini karena Vs2012 menambahkan berikut ini ke file csproj:

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

Anda dapat dengan aman menghapus bagian itu dan solusi Anda akan dibangun.

Seperti yang ditunjukkan oleh Sielu, Anda harus memastikan bahwa file .proj dimulai dengan <Project ToolsVersion="12"jika tidak lain kali Anda membuka proyek dengan visual studio 2010, itu akan menambahkan simpul yang dihapus lagi.

Jika tidak, jika Anda perlu menggunakan webdeploy atau Anda menggunakan build server, solusi di atas tidak akan berfungsi tetapi Anda bisa menentukan VisualStudioVersionproperti di skrip build Anda:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

atau edit definisi bangunan Anda:

edit definisi bangunan untuk menentukan properti <code> VisualStudioVersion </code>

giammin
sumber
1
Saya mendapat kesalahan menggunakan msbuild dari command prompt. Menghapus bagian ini dari file proyek sovled masalah.
Peter Hedberg
7
Saya menggunakan jawaban ini dan hanya berfungsi jika saya memastikan file proj * saya mulai dengan <Project ToolsVersion = "12" Sebelum saya memiliki <Project ToolsVersion = "4" dan setiap kali saya membuka proyek di VS itu menambahkan dua node lagi (Yaitu proyek kembali dimigrasikan ke versi terbaru).
Sielu
3
@giammin, saya sudah menemukan solusinya. JANGAN hapus bagian dari file proyek Anda. Tetapkan versi alat yang tepat dalam definisi build Anda. Ini sangat mudah untuk dilakukan. Buka definisi pembuatan Anda dan buka halaman "Proses". Kemudian di bawah grup "3. Advanced" Anda memiliki properti yang disebut "MSBuild Arguments". Tempatkan parameter di sana dengan sintaks berikut "/p:VisualStudioVersion=12.0". Tentu saja tanpa tanda kutip. Jika Anda memiliki lebih banyak parameter, pisahkan dengan spasi dan bukan koma. Konfigurasi yang Anda sarankan untuk dihapus digunakan oleh bagian lain dari studio visual dalam proses build Anda ...
Ralph Jansen
9
Menghapus garis itu tampaknya mematahkan Web Deploy
Colin Pear
4
Saya memiliki masalah yang sama diselesaikan dengan menggunakan properti /p:VisualStudioVersion=12.0 seperti yang direkomendasikan di atas. Terima kasih
Randeep
70

Saya punya ini juga dan Anda dapat memperbaikinya dengan mengatur versi alat di definisi build Anda.

Ini sangat mudah untuk dilakukan. Buka definisi pembuatan Anda dan buka halaman " Proses ". Kemudian di bawah grup " 3. Advanced " Anda memiliki properti yang disebut " MSBuild Arguments ". Tempatkan parameter di sana dengan sintaks berikut

/p:VisualStudioVersion=12.0 

Jika Anda memiliki lebih banyak parameter, pisahkan dengan spasi dan bukan koma.

Ralph Jansen
sumber
1
Kami baru saja menyelesaikan upgrade dari TFS 2005 ke TFS 2013 dan ini adalah rintangan terakhir kami. Ini jelas bekerja untuk kami dan menyelamatkan saya dari mencabut rambut saya. Terima kasih banyak! +1.
Simon Whitehead
2
Artikel ini oleh Sayed Ibrahim Hashimi menjelaskan masalah di Visual Studio 2010/2012. Pembuatan baris perintah menggunakan format file sln versi -1 sebagai VisualStudioVersion. Anda bisa mengganti nilai ini dari baris perintah seperti yang dijelaskan Ralph, atau sebagai properti tugas MSBuild dari skrip build. Saya memiliki masalah yang sama dengan Visual Studio 2013, dan mengganti VisualStudioVersion menyelesaikan masalah.
mcdon
1
Ini juga bekerja untuk kita. Kami juga mempertimbangkan untuk memodifikasi templat pembuatan sendiri, yang dijelaskan di sini , yang mungkin merupakan pilihan yang lebih baik jika Anda memiliki lusinan definisi pembuatan.
JamesQMurphy
ini bekerja untuk saya. Saya menghapus dalam file csproj referensi untuk visualstudioversion dan kemudian menambahkan bahwa argumen msbuild
Jhayes2118
51

Ini terkait erat tetapi mungkin atau mungkin tidak memperbaiki masalah khusus OP. Dalam kasus saya, saya mencoba untuk mengotomatiskan penyebaran situs Azure menggunakan VS2013. Membangun dan menggunakan via karya VS, menggunakan MSBuild menunjukkan kesalahan yang sama di sekitar "target". Ternyata MSBuild berbeda di bawah VS2013, dan sekarang menjadi bagian dari VS dan bukan .Net Framework (lihat http://timrayburn.net/blog/visual-studio-2013-and-msbuild/ ). Pada dasarnya, gunakan versi MSBuild yang benar:

LAMA, VS2012

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

BARU, VS2013

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

Lebih baru, VS2015

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

Masih lebih baru, VS2017 (tidak sepenuhnya menguji tetapi menemukan - mereka telah memindahkan banyak hal)

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe
Pelawak
sumber
Ini memperbaikinya untuk saya. Juga, jawaban serupa untuk pertanyaan serupa di sini: stackoverflow.com/a/19826448/61569
Anthony F
22

Saya baru saja menerima tanggapan dari Kinook, yang memberi saya tautan :

Pada dasarnya, saya perlu menghubungi yang berikut sebelum melakukan bulding. Saya kira Visual Studio 2013 tidak secara otomatis mendaftarkan lingkungan terlebih dahulu, tetapi 2012 melakukannya, atau saya lakukan dan lupa.

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

Semoga posting ini membantu orang lain.

Sarah Weinberger
sumber
Terima kasih banyak, ini memecahkan masalah saya ketika membangun nodeJS node-gyptersebut Cpp default.propstidak ditemukan! +1
Pogrindis
21

solusi giammin sebagian salah. Anda TIDAK HARUS menghapus seluruh PropertyGroup dari solusi Anda. Jika Anda melakukannya, fitur "DeployTarget = Paket" MSBuild akan berhenti berfungsi. Fitur ini bergantung pada "VSToolsPath" yang sedang diatur.

<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)' != ''" />
cat5dev
sumber
10

Saya memiliki masalah ini untuk target FSharp kami (FSharpTargetPath kosong).

Banyak jalur dibangun dengan mengacu pada versi VS.

Karena berbagai alasan, build kami berjalan dengan hak istimewa sistem, dan variabel lingkungan "VisualStudioVersion" hanya disetel (oleh pemasang VS 2013) pada tingkat "pengguna" - yang cukup adil.

Pastikan bahwa " VisualStudioVersion" variabel lingkungan diatur ke " 12.0" pada level (Sistem atau Pengguna) yang Anda jalankan.

Scott
sumber
5
Ini mungkin skenario umum ketika menjalankan server build (seperti CruiseControl atau TeamCity), di mana layanan berjalan di bawah akun layanan tertentu yang bahkan mungkin tidak memiliki izin desktop interaktif. Kiat ini memecahkan masalah bagi saya (VS 2013 diinstal pada instalasi bersih Server 2008 R2, dengan CruiseControl.NET)
David Keaveny
Di mana saya dapat melihat "VisualStudioVersion" saya?
WEFX
@WEFX melihat variabel lingkungan dengan memilih Systemdari Control Panel, lalu pilih Advanced system settings, dan akhirnya klikEnvironment Variables
Scott
6

Menjalankan ini di commandline akan memperbaiki masalah juga. SETX VisualStudioVersion "12.0"

Steve
sumber
Ini bekerja untuk saya dan lebih disukai untuk memodifikasi file proyek.
Sean
4

Jika Anda memigrasikan Visual Studio 2012 ke 2013, maka buka file proyek * .csprorj dengan edior.
dan periksa elemen ToolsVersion tag 'Project'.

Itu nilai 4,0
Anda membuatnya menjadi 12,0

  • Dari

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

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

Atau Jika Anda membangun dengan msbuild maka tentukan saja properti VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0

Kim Ki Won
sumber
1
ToolsVersion harus bukan satu-satunya variabel untuk memperbaiki pesan kesalahan ini karena saya melihat proyek dengan ToolsVersion yang tidak dapat dibangun dengan benar.
Patrick Desjardins
2

Saya menggunakan utilitas build eksternal. Pikirkan sesuatu seperti Semut, jika saya memahami produk dengan benar, hanya versi komersial. Saya harus menghubungi pabrikan untuk jawabannya.

Ternyata, ada makro global dalam proyek ini, DEVSTUDIO_NET_DIR. Saya harus mengubah jalur ke. Net di sana. Mereka mencantumkan berbagai versi studio visual sebagai "Aksi", yang membuat saya putus, tetapi semua jalan mengarah ke satu variabel global di belakang layar. Saya akan mencantumkan itu sebagai cacat terhadap produk, jika saya memiliki cara saya, kecuali saya kehilangan sesuatu dalam pemahaman saya. Memperbaiki jalur di sana memperbaiki masalah build.

Sarah Weinberger
sumber
2

Saya telah menginstal Visual Studio 2013. Ini bekerja untuk saya:

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

Jadi saya telah mengubah kondisi dari ==ke !=dan nilai dari 10.0ke 12.0.

pinus.acer
sumber
2

Saya memiliki masalah serupa. Semua solusi yang diusulkan hanya bekerja untuk masalah ini tetapi tidak menyelesaikan sumber kesalahan. Solusi @giammin tidak boleh diterapkan jika Anda menggunakan tfs build server karena itu baru saja mem-publish fungsionalitas. solusi @ cat5dev - memecahkan masalah tetapi tidak memecahkan sumbernya.

Saya hampir yakin bahwa Anda menggunakan templat proses build untuk VS2012 seperti ReleaseDefaultTemplate.11.1.xaml or DefaultTemplate.11.1.xaml templat templat ini dibuat untuk VS2012 dan $ (VisualStudioVersion) disetel ke 11.0

Anda harus menggunakan templat proses bangun untuk VS2013 ReleaseTfvcTemplate.12.xaml or TfvcTemplate.12.xaml yang memiliki $ (VisualStudioVersion) diatur ke 12.0

Ini berfungsi tanpa ada perubahan pada file proyek.

Imajiner
sumber
2

Saya juga mengalami kesalahan yang sama .. Saya melakukan ini untuk memperbaikinya

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

mengubah

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

dan sudah selesai.

Pyro
sumber
2

Dalam kasus saya, saya hanya berkomentar di bawah baris dengan membuka file .csproj dan melakukan trik

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

Masalah saya mungkin berbeda tetapi saya diseret ke sini, tetapi ini dapat membantu seseorang.

Saya memilih satu proyek web dari solusi saya dan mencoba membukanya sebagai proyek yang berdiri sendiri yang membuat masalah, setelah itu saya bisa menyelesaikan masalah.

Usman Younas
sumber
2

Gunakan versi MSBuild yang benar. Setel Variabel Lingkungan ke:

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

Ini juga akan bekerja untuk proyek VS 2019

Sebelumnya kami mengaturnya untuk C:\Windows\Microsoft.NET\Framework\v4.0.30319

Manish
sumber
Saya menggunakan "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ MSBuild.exe" sebagai ganti "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild. exe "dan kerjanya
ELKALAKHI Mohammed
Ya, saya menggunakan proyek SSDT (.sqlproj), dengan VisualStudioVersion = 14.0 dalam file proyek. Saya memasang core 3.1, yang menetapkan env vars saya untuk target hanya kepada Tuhan yang tahu di mana. Menggunakan msbuild di folder yang Anda sarankan berfungsi seperti pesona!
Matthew Beck
1

Dalam lingkungan dev kasus saya adalah VS2013 dan saya menggunakan TFS 2010. Build ditargetkan untuk .NET 4.5.1. Saya mengatur pembuatan otomatis untuk CI. setiap kali saya mencoba workarounds yang disebutkan di atas - seperti menghapus grup properti sepenuhnya atau mengganti beberapa baris etc.my build dulu terjadi di TFS tetapi saya publikasikan ke biru dulu gagal dengan 'MSDeploy' atau kadang-kadang beberapa kesalahan yang berbeda. Saya tidak dapat mencapai keduanya secara bersamaan.

Jadi akhirnya saya harus melewati argumen MSBuild untuk menyelesaikan masalah ini.

Edit definisi build Goto> Proses> 3. Tingkat Lanjut> Argumen MSBuild (disetel ke) /p:VisualStudioVersion=12.0

Ini berhasil untuk saya.

Vishwajit G
sumber
1

Anda harus menyalin folder Aplikasi Web dari C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ to C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \

Tazos333
sumber
Atau salin saja file Microsoft.WebApplication.targets dari lokasi di mana Visual Studio 2013 diinstal.
ThatBlairGuy
0

Anda akan menemukan

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

dalam file csproj yang muncul kesalahan ini. Hapus saja ini dari csproj dan kemudian buat.

Mukund
sumber
0

Hanya satu hal yang perlu dilakukan untuk menyelesaikan masalah: upgrade TeamCity ke versi 8.1.x atau lebih tinggi karena dukungan untuk Visual Studio 2012/2013 dan MSBuild Tools 2013 hanya diperkenalkan di TeamCity 8.1. Setelah Anda memutakhirkan pengaturan TeamCity Anda memodifikasi MSBuild Tools Version dalam langkah membangun Anda sesuai dan masalah akan hilang. Untuk info lebih lanjut baca di sini: http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html

Alex T.
sumber
0

Saya - tidak ada yang membantu dalam mengubah nilai v11.0 dari variabel VisualStudioVersion ke v10.0. Mengubah variabel dalam file .csproj tidak. Mengaturnya melalui perintah promt tidak. Dll ...

Akhirnya menyalin folder lokal saya dari versi tertentu (v11.0) ke server build saya.

Jurijs Kastanovs
sumber
0

Saya sudah mencoba semua solusi di atas dan masih belum berhasil. Saya telah mendengar orang memasang studio visual pada server build mereka untuk memperbaikinya, tetapi saya hanya memiliki ruang kosong 5gb jadi saya hanya menyalin C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio ke server build saya dan menyebutnya sehari . Mulai bekerja setelah itu, menggunakan team city 9.x dan visual studio 2013.

sumpah
sumber
0

Berdasarkan TFS 2015 Build Server

Jika Anda mengatasi kesalahan ini ... 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.

Buka .csprojfile proyek yang disebutkan dalam pesan kesalahan dan komentar bagian di bawah ini

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

Julius Depulla
sumber
0

Saya mendapatkan kesalahan ini ketika saya menginstal beberapa komponen VS. Sayangnya tidak ada jawaban yang tidak membantu saya. Saya menggunakan TFS untuk pengembangan perintah dan saya tidak memiliki izin untuk mengedit definisi build. Saya memecahkan masalah ini dengan menghapus variabel lingkungan yang dipanggil VS110COMNTOOLSdan VS120COMNTOOLS. Saya pikir itu diinstal dengan komponen VS saya.

Joseph Katzman
sumber
0

Saya menemukan saya kehilangan folder WebApplications pada PC lokal saya, tidak menginstal dengan Visual Studio 2017 seperti ketika saya menggunakan 2012.

Keris
sumber
0

Dalam kasus saya, saya menggunakan versi yang salah dari MSBuild.exe.

Versi yang perlu Anda gunakan tergantung pada versi Visual Studio yang Anda gunakan untuk membuat proyek Anda. Dalam kasus saya, saya membutuhkan 14.0 (menggunakan Visual Studio 2015).

Ini ditemukan di:

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

Anda dapat melihat di bawah:

C:\Program Files (x86)\MSBuild

Untuk menemukan versi lain.

EM-Creations
sumber