Lỗi xây dựng VS2013 bên ngoài Lỗi lỗi MSB4019: Không tìm thấy dự án đã nhập <path>


201

Tôi đang xây dựng một dự án thông qua dòng lệnh chứ không phải trong Visual Studio 2013. Lưu ý, tôi đã nâng cấp dự án của mình từ Visual Studio 2012 lên 2013. Dự án xây dựng tốt trong IDE. Ngoài ra, tôi đã gỡ cài đặt hoàn toàn VS2012 trước, khởi động lại và cài đặt VS2013. Phiên bản duy nhất của Visual Studio mà tôi có là 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.

Đây là hai dòng trong câu hỏi:

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

Dòng thứ hai ban đầu là v10.0, nhưng tôi đã tự thay đổi nó thành v12.0.

$ (VSToolsPath) kéo dài từ những gì tôi thấy đến thư mục v11.0 (VS2012), rõ ràng là không còn ở đó nữa. Đường dẫn nên có đến v12.0.

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

Tôi đã thử chỉ định VSToolsPath trong bảng biến môi trường hệ thống của mình, nhưng tiện ích xây dựng bên ngoài vẫn sử dụng v11.0. Tôi đã thử tìm kiếm thông qua sổ đăng ký và không tìm thấy gì.

Đáng buồn thay, tôi không thấy bất kỳ cách dễ dàng để có được dòng lệnh chính xác được sử dụng. Tôi sử dụng một công cụ xây dựng.

Suy nghĩ?


Câu hỏi tương tự ở đây stackoverflow.com/questions/17433904/ Mạnh
Anthony F

Trong trường hợp của tôi, tôi đã phải chỉ định VisualStudioVersion chính xác trong sự kiện xây dựng đang xây dựng với mục tiêu WebPublish.
user145400

Câu trả lời:


250

Tôi đã có cùng một vấn đề và tìm một giải pháp dễ dàng hơn

Đó là do Vs2012 thêm phần sau vào tệp csproj:

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

Bạn có thể gỡ bỏ phần đó một cách an toàn và giải pháp của bạn sẽ được xây dựng.

Như Sielu đã chỉ ra rằng bạn phải đảm bảo rằng tệp .proj bắt đầu bằng <Project ToolsVersion="12"cách khác vào lần tiếp theo bạn mở dự án với visual studio 2010, nó sẽ thêm nút bị loại bỏ một lần nữa.

Mặt khác, nếu bạn cần sử dụng webdeploy hoặc bạn sử dụng máy chủ xây dựng, giải pháp trên sẽ không hoạt động nhưng bạn có thể chỉ định thuộc VisualStudioVersiontính trong tập lệnh xây dựng của mình:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

hoặc chỉnh sửa định nghĩa bản dựng của bạn:

chỉnh sửa định nghĩa bản dựng để chỉ định thuộc tính <code> VisualStudioVersion </ code>


1
Tôi đã gặp lỗi khi sử dụng msbuild từ dấu nhắc lệnh. Loại bỏ phần này khỏi tệp dự án đã khắc phục vấn đề.
Peter Hedberg

7
Tôi đã sử dụng câu trả lời này và nó chỉ hoạt động nếu tôi đảm bảo rằng tệp * proj của tôi bắt đầu bằng <Project ToolsVersion = "12" Trước khi tôi có <Project ToolsVersion = "4" và mỗi lần tôi mở dự án trong VS, nó lại thêm hai nút (tức là nó đã di chuyển lại dự án sang phiên bản mới nhất).
Sielu

3
@giammin, mình đã tìm được giải pháp rồi. KHÔNG xóa phần này khỏi tệp dự án của bạn. Đặt phiên bản công cụ phù hợp trong định nghĩa xây dựng của bạn. Điều này rất dễ làm. Mở định nghĩa bản dựng của bạn và đi đến trang "Quy trình". Sau đó, trong nhóm "3. Nâng cao", bạn có một thuộc tính được gọi là "Đối số MSBuild". Đặt tham số ở đó với cú pháp sau "/p:VisualStudioVersion=12.0". Tất nhiên không có dấu ngoặc kép. Nếu bạn có nhiều tham số hơn, hãy tách chúng bằng dấu cách và không phải dấu phẩy. Cấu hình mà bạn đề xuất loại bỏ được sử dụng bởi các bộ phận khác của phòng thu trực quan trong quá trình xây dựng của bạn ...
Ralph Jansen

9
Xóa dòng đó dường như phá vỡ Triển khai Web
Colin Pear

4
Tôi đã giải quyết vấn đề tương tự bằng cách sử dụng thuộc tính /p:VisualStudioVersion=12.0 như khuyến nghị ở trên. Cảm ơn
Randeep 2/03/2015

70

Tôi cũng có cái này và bạn có thể sửa nó bằng cách đặt phiên bản công cụ trong định nghĩa bản dựng của bạn.

Điều này rất dễ làm. Mở định nghĩa bản dựng của bạn và đi đến trang " Quy trình ". Sau đó, trong nhóm " 3. Nâng cao ", bạn có một thuộc tính được gọi là " Đối số MSBuild ". Đặt tham số ở đó với cú pháp sau

/p:VisualStudioVersion=12.0 

Nếu bạn có nhiều tham số hơn, hãy tách chúng bằng dấu cách và không phải dấu phẩy.


1
Chúng tôi vừa hoàn thành nâng cấp từ TFS 2005 lên TFS 2013 và đây là rào cản cuối cùng của chúng tôi. Điều này chắc chắn làm việc cho chúng tôi và cứu tôi khỏi nhổ tóc của tôi. Cám ơn rất nhiều! +1.
Simon Whitehead

2
Bài viết này của Sayed Ibrahim Hashimi mô tả vấn đề trong Visual Studio 2010/2012. Bản dựng dòng lệnh sử dụng định dạng tệp sln phiên bản -1 làm VisualStudioVersion. Bạn có thể ghi đè giá trị này từ dòng lệnh như Ralph mô tả hoặc là một thuộc tính của tác vụ MSBuild từ tập lệnh xây dựng. Tôi gặp vấn đề tương tự với Visual Studio 2013 và việc ghi đè VisualStudioVersion đã giải quyết vấn đề.
mcdon

1
Điều này làm việc cho chúng tôi là tốt. Chúng tôi cũng đã xem xét sửa đổi bản thân mẫu xây dựng, được mô tả ở đây , có thể là một lựa chọn tốt hơn nếu bạn có hàng tá định nghĩa bản dựng.
JamesQMurphy

Điều này làm việc cho tôi. Tôi đã xóa trong các tệp csproj bất kỳ tham chiếu nào đến visualstudioversion và sau đó thêm đối số msbuild
Jhayes2118

51

Điều này có liên quan chặt chẽ nhưng có thể hoặc không thể khắc phục sự cố cụ thể của OP. Trong trường hợp của tôi, tôi đã cố gắng tự động hóa việc triển khai một trang web Azure bằng VS2013. Xây dựng và triển khai thông qua các công trình VS, tuy nhiên, sử dụng MSBuild cho thấy một lỗi tương tự xung quanh các "mục tiêu". Hóa ra MSBuild khác với VS2013 và hiện là một phần của VS chứ không phải .Net Framework (xem http://timrayburn.net/blog/visual-studio-2013-and-msbuild/ ). Về cơ bản, sử dụng phiên bản chính xác của MSBuild:

TUỔI, VS2012

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

MỚI, VS2013

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

Mới hơn, VS2015

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

Vẫn còn mới hơn, VS2017 (chưa thử nghiệm đầy đủ nhưng được phát hiện - họ đã di chuyển mọi thứ xung quanh một chút)

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

CÁi này đã sửa nó giúp tôi. Ngoài ra, câu trả lời tương tự cho một câu hỏi tương tự ở đây: stackoverflow.com/a/19826448/61569
Anthony F

22

Tôi vừa nhận được phản hồi từ Kinook, người đã cho tôi một liên kết :

Về cơ bản, tôi cần gọi những điều sau đây trước khi phình ra. Tôi đoán Visual Studio 2013 không tự động đăng ký môi trường trước, nhưng năm 2012 đã làm hoặc tôi đã làm và quên.

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

Hy vọng, bài viết này sẽ giúp người khác.


Cảm ơn bạn rất nhiều, điều này giải quyết vấn đề của tôi khi xây dựng nodeJS node-gypsự Cpp default.propskhông tìm thấy! +1
Pogrindis

21

Giải pháp của giammin là một phần không chính xác. Bạn KHÔNG NÊN xóa toàn bộ Nhóm tài sản đó khỏi giải pháp của mình. Nếu bạn làm như vậy, tính năng "DeployTarget = Gói" của MSBuild sẽ ngừng hoạt động. Tính năng này dựa trên "VSToolsPath" đang được đặt.

<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

Tôi gặp vấn đề này đối với các mục tiêu FSharp của chúng tôi (FSharpT TargetPath trống).

Nhiều đường dẫn được xây dựng với tham chiếu đến phiên bản VS.

Vì nhiều lý do, bản dựng của chúng tôi chạy với các đặc quyền hệ thống và biến môi trường "VisualStudioVersion" chỉ được đặt (bởi trình cài đặt VS 2013) ở cấp độ "người dùng" - đủ công bằng.

Đảm bảo rằng VisualStudioVersionbiến môi trường "" được đặt thành " 12.0" ở cấp độ (Hệ thống hoặc Người dùng) mà bạn đang chạy.


5
Đây có lẽ là một tình huống phổ biến khi chạy máy chủ xây dựng (như CruiseControl hoặc TeamCity), trong đó dịch vụ chạy trong một tài khoản dịch vụ cụ thể thậm chí có thể không có quyền truy cập tương tác. Mẹo này đã giải quyết vấn đề cho tôi (VS 2013 được cài đặt trên bản cài đặt sạch Server 2008 R2, với CruiseControl.NET)
David Keaveny

Tôi có thể thấy "VisualStudioVersion" của mình ở đâu?
WEFX

@CHFX xem các biến môi trường bằng cách chọn Systemtừ Bảng điều khiển, sau đó chọn Advanced system settingsvà cuối cùng nhấpEnvironment Variables
Scott

6

Chạy này trong dòng lệnh cũng sẽ khắc phục vấn đề. SETX VisualStudioVersion "12.0"


Điều này làm việc cho tôi và tốt hơn là sửa đổi tệp dự án.
Sean

4

Nếu bạn di chuyển Visual Studio 2012 đến 2013, thì hãy mở tệp dự án * .csprorj với edior.
và kiểm tra phần tử ToolsVersion của thẻ 'Project'.

Đó là giá trị 4.0
Bạn thực hiện đến 12.0

  • Từ

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

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

Hoặc Nếu bạn xây dựng với msbuild thì chỉ cần chỉ định thuộc tính VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0


1
ToolsVersion không được là biến duy nhất để sửa thông báo lỗi này vì tôi thấy dự án có ToolsVersion không thể xây dựng chính xác.
Patrick Desjardins

2

Tôi đã sử dụng một tiện ích xây dựng bên ngoài. Hãy nghĩ về một cái gì đó như Kiến, nếu tôi hiểu chính xác sản phẩm, chỉ là một phiên bản thương mại. Tôi đã phải liên hệ với nhà sản xuất để trả lời.

Hóa ra, có một macro toàn cầu trong dự án, DEVSTUDIO_NET_DIR. Tôi đã phải thay đổi đường dẫn đến .Net ở đó. Họ liệt kê các phiên bản phòng thu hình ảnh khác nhau là "Hành động", thông qua tôi, nhưng tất cả các con đường đều dẫn trở lại một biến toàn cầu đằng sau hậu trường. Tôi sẽ liệt kê đó là một khiếm khuyết đối với sản phẩm, nếu tôi có cách của mình, trừ khi tôi thiếu một cái gì đó trong sự hiểu biết của tôi. Sửa đường dẫn ở đó đã sửa lỗi xây dựng.


2

Tôi đã cài đặt Visual Studio 2013. Điều này làm việc cho tôi:

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

Vì vậy, tôi đã thay đổi điều kiện từ ==sang !=và giá trị từ 10.0sang 12.0.


2

Tôi đã có vấn đề tương tự. Tất cả các giải pháp được đề xuất chỉ giải quyết vấn đề này nhưng không giải quyết được nguồn lỗi. Không nên áp dụng giải pháp @giammin nếu bạn đang sử dụng máy chủ xây dựng tfs vì nó chỉ bị lỗi chức năng xuất bản. Giải pháp @ cat5dev - Giải quyết vấn đề nhưng không giải quyết được nguồn của nó.

Tôi gần như chắc chắn rằng bạn đang sử dụng mẫu quy trình xây dựng cho VS2012 như ReleaseDefaultTemplate.11.1.xaml or DefaultTemplate.11.1.xaml các mẫu xây dựng này đã được tạo cho VS2012 và $ (VisualStudioVersion) được đặt thành 11.0

Bạn nên sử dụng mẫu quy trình xây dựng cho VS2013 ReleaseTfvcTemplate.12.xaml or TfvcTemplate.12.xaml có $ (VisualStudioVersion) được đặt thành 12.0

Điều này hoạt động mà không có bất kỳ thay đổi trong tập tin dự án.


2

Tôi cũng có lỗi tương tự .. Tôi đã làm điều này để sửa nó

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

thay đổi thành

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

và nó đã được thực hiện.


2

Trong trường hợp của tôi, tôi chỉ nhận xét dòng dưới đây bằng cách mở tệp .csproj và thực hiện thủ thuật

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

Vấn đề của tôi có thể khác nhưng tôi bị kéo vào đây, nhưng điều này có thể giúp được ai đó.

Tôi đã chọn một dự án web duy nhất từ ​​giải pháp của mình và cố gắng mở nó như một dự án độc lập đang gây ra sự cố, sau khi có thể giải quyết vấn đề.


2

Sử dụng phiên bản chính xác của MSBuild. Đặt môi trường biến thành:

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

Điều này cũng sẽ làm việc cho các dự án VS 2019

Trước đây chúng tôi đã thiết lập nó để C:\Windows\Microsoft.NET\Framework\v4.0.30319


Tôi đã sử dụng "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ MSBuild.exe" thay vì "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild. exe "và nó đã hoạt động
ELKALAKHI Mohammed

Vâng, tôi đang sử dụng một dự án SSDT (.sqlproj), với VisualStudioVersion = 14.0 trong tệp dự án. Tôi đã cài đặt lõi 3.1, trong đó thiết lập các lọ env của tôi cho các mục tiêu chỉ có Chúa mới biết. Sử dụng msbuild trong thư mục mà bạn đề xuất đã hoạt động như một cơ duyên!
Matthew Beck

1

Trong trường hợp của tôi, môi trường dev là VS2013 và tôi đang sử dụng TFS 2010. Build được nhắm mục tiêu cho .NET 4.5.1. Tôi đã thiết lập xây dựng tự động cho CI. Bất cứ khi nào tôi đã thử các cách giải quyết được đề cập ở trên - như loại bỏ hoàn toàn nhóm thuộc tính hoặc thay thế một số dòng, v.v., bản dựng của tôi đã từng xảy ra trong TFS nhưng xuất bản của tôi thành azure đã từng thất bại với 'MSDeploy' hoặc đôi khi có một số lỗi khác nhau. Tôi đã không thể đạt được cả hai cùng một lúc.

Vì vậy, cuối cùng tôi đã phải vượt qua đối số MSBuild để giải quyết vấn đề.

Goto Chỉnh sửa định nghĩa bản dựng> Quy trình> 3. Nâng cao> Đối số MSBuild (được đặt thành) /p:VisualStudioVersion=12.0

Nó làm việc cho tôi.


1

Bạn nên sao chép thư mục Ứng dụng web từ C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ sang C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \


Hoặc chỉ sao chép tệp Microsoft.WebApplication.target từ vị trí cài đặt Visual Studio 2013.
ThatBlairGuy

0

Bạn sẽ thấy

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

trong tệp csproj mà lỗi này xuất hiện. Chỉ cần xóa cái này khỏi csproj và sau đó xây dựng.


0

Chỉ có một điều cần làm để giải quyết vấn đề: nâng cấp TeamCity lên phiên bản 8.1.x trở lên vì hỗ trợ cho Visual Studio 2012/2013 và MSBuild Tools 2013 chỉ được giới thiệu trong TeamCity 8.1. Khi bạn đã nâng cấp TeamCity, hãy sửa đổi cài đặt Phiên bản Công cụ MSBuild trong bước xây dựng của bạn, theo đó, vấn đề sẽ biến mất. Để biết thêm thông tin đọc tại đây: http://blog.turlov.com/2014/07/upTHER-teamcity-to-enable-support-for.html


0

Tôi - không có gì giúp thay đổi giá trị v11.0 của biến VisualStudioVersion thành v10.0. Thay đổi biến trong tệp .csproj đã không. Thiết lập nó thông qua lệnh promt đã không. Vân vân...

Đã kết thúc việc sao chép thư mục cục bộ của phiên bản cụ thể đó (v11.0) vào máy chủ bản dựng của tôi.


0

Tôi đã thử tất cả các giải pháp trên mà vẫn không gặp may. Tôi đã nghe thấy mọi người cài đặt visual studio trên máy chủ xây dựng của họ để sửa nó, nhưng tôi chỉ có 5gb dung lượng trống nên tôi mới sao chép C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio vào máy chủ xây dựng của tôi và gọi nó là một ngày . Bắt đầu làm việc sau đó, sử dụng team city 9.x và visual studio 2013.


0

Dựa trên máy chủ xây dựng TFS 2015

Nếu bạn khắc phục lỗi này ... 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.

Mở .csprojtệp của dự án có tên trong thông báo lỗi và nhận xét phần bên dưới

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


0

Tôi gặp lỗi này khi cài đặt một số thành phần VS. Thật không may, những câu trả lời này không giúp tôi. Tôi sử dụng TFS để phát triển lệnh và tôi không có quyền chỉnh sửa định nghĩa bản dựng. Tôi đã giải quyết vấn đề này bằng cách xóa các biến môi trường được gọi là VS110COMNTOOLSVS120COMNTOOLS. Tôi nghĩ rằng nó đã được cài đặt với các thành phần VS của tôi.


0

Tôi thấy rằng tôi đã thiếu thư mục WebAppluggest trên PC cục bộ của mình, không cài đặt với Visual Studio 2017 như khi tôi sử dụng 2012.


0

Trong trường hợp của tôi, tôi đã sử dụng phiên bản sai của MSBuild.exe.

Phiên bản bạn cần sử dụng tùy thuộc vào phiên bản Visual Studio bạn đã sử dụng để tạo dự án của mình. Trong trường hợp của tôi, tôi cần 14.0 (đã sử dụng Visual Studio 2015).

Điều này đã được tìm thấy tại:

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

Bạn có thể xem bên dưới:

C:\Program Files (x86)\MSBuild

Để tìm phiên bản khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.