v11.0 \ WebApplication \ Microsoft.WebApplication.targets không được tìm thấy khi tệp thực sự tham chiếu v10


84

Đầu tiên một số nền. Vào cuối năm 2012, chúng tôi đã chuyển giải pháp vs2008 của mình sang vs2010 nhưng chúng tôi vẫn nhắm mục tiêu .NET 3.5. (Tôi không biết gì ngoài những thứ mới nhất và tuyệt vời nhất ở đây!)

Chúng tôi đã không gặp bất kỳ sự cố nào với thiết lập này cho đến vài tuần trước khi mọi người bắt đầu gặp những lỗi sau:

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

Điều thú vị là nếu bạn nhìn vào tệp dự án, nó tham chiếu v10, điều này có ý nghĩa vì chúng tôi không sử dụng Visual Studio 2012.

Lỗi này xảy ra với nhiều người trong chúng ta cùng một lúc và thậm chí trên các nhánh mã cũ hơn mà không thay đổi trong nhiều tháng.

Tôi nghi ngờ một số bản cập nhật đã được đẩy lên máy của chúng tôi khiến mọi thứ bối rối nhưng tôi không biết phải làm gì với nó.

Giải pháp ngắn hạn là cài đặt VS 2012 và không sử dụng nó nhưng tôi hy vọng một thứ gì đó sạch hơn một chút.


17
Tôi nhận thấy rằng việc thêm "/p:VisualStudioVersion=10.0" vào dòng lệnh MSBuild sẽ khiến điều này biến mất nhưng vẫn có cảm giác như bị hack.
drs9222

Câu trả lời:


116

Tôi gặp phải vấn đề tương tự với Visual Studio 2013. Hóa ra là tôi đang sử dụng phiên bản cũ của MSBuild - phiên bản đi kèm với .NET Framework - từ dòng lệnh. Microsoft hiện đang phát hành MSBuild như một phần của Visual Studio và cũng là một trình cài đặt riêng ( http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of- visual-studio.aspx ).

Giải pháp là sử dụng phiên bản mới của MSBuild.exe có trong C:\Program Files (x86)\MSBuild\12.0\Bin. Khi tôi đã làm điều đó, tất cả các lỗi mục tiêu đều biến mất.

CHỈNH SỬA 1

Như đã đề cập trong các bình luận, mỗi phiên bản mới của MSBuild đều mang theo một thư mục mới. Đối với Visual Studio 2015, hãy sử dụng C:\Program Files (x86)\MSBuild\14.0\Bin.

CHỈNH SỬA 2

Như đã đề cập trong phần nhận xét, đối với Visual Studio 2017, hãy sử dụng C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\MSBuild\15.0\Bin\MSBuild.exe.


1
Tôi đã đăng một yêu cầu trên diễn đàn TeamCity để kết hợp đường dẫn mới (là cách xử lý cài đặt NuGet). Hy vọng rằng họ giải quyết vấn đề này một cách nhanh chóng.
David Peden

1
Liên kết trực tiếp trong bài đăng trên blog đến tải xuống các công cụ riêng biệt không còn hợp lệ. Liên kết chính xác là: microsoft.com/en-us/download/details.aspx?id=40760 .
David Peden

1
Và, cứ như vậy, Jetbrains ra tay giải cứu với phiên bản 8.0.5. Bài đăng trên blog chính thức: teamcitydev.blogspot.com/2013/11/…
David Peden

1
Nếu bạn đã có địa phương Powershell xây dựng kịch bản, bạn chỉ có thể thêm vào đường dẫn của bạn: $env:Path = $env:Path + ";C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications"và sử dụng v4 msbuild (Bạn có thể làm điều này trên build hộp của bạn quá)
Chris S

4
Đúng! Cảm ơn bạn - đây là giải pháp thích hợp.
Josh M.

52

Nếu bạn có một máy chủ bản dựng chưa được cài đặt VS2012, bạn có thể khắc phục sự cố này bằng cách

a) cài đặt gói MSBuild.Microsoft.VisualStudio.Web.targets vào giải pháp của bạn và

b) thay thế dòng này trong tệp .csproj:

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

Với dòng này trỏ đến gói nuget

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

BIÊN TẬP

Như @joedragons đã chỉ ra phiên bản trong dòng cập nhật phải khớp với phiên bản gói nuget, tức là thay thế targets.11.0.2.1bằng targets.x.x.x.xphiên bản hiện tại.


1
Tương tự như vậy, lời khuyên tuyệt vời!
Kevin Obee

2
Cảm ơn, giải pháp tuyệt vời
Pavel

1
Có thể hiển nhiên nhưng dòng bạn thay thế bằng phải chứa phiên bản của gói bạn cài đặt. Cái tôi đã cài đặt là 12.0.4 nên khi tôi nhập bản nhập thay thế vào, tôi gặp lỗi tương tự. Khi tôi chuyển sang ... Web.targets.12.0.4 \ ... tất cả đều tốt =) Cảm ơn rất nhiều!
joedragons

2
Bạn không cần phần b của câu trả lời này nữa. Vì lý do nào đó SO đã từ chối chỉnh sửa của tôi để loại bỏ những chi tiết không cần thiết.
bbodenmiller

1
cảm ơn Tôi đã làm tương tự với phiên bản cuối cùng MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3
Ahmed Samir

23

Một giải pháp đơn giản cho vấn đề này:

Đi đến đường dẫn sau:

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio

Bạn sẽ thấy phiên bản mới nhất V10.0, v11.0, v12.0 tùy thuộc vào cài đặt Visual Studio 2010, 2012 hoặc 2013 của bạn.

Sao chép WebApplicationsthư mục từ một trong hai thư mục phiên bản mới nhất và dán vào thư mục khác.

Các vấn đề của bạn sẽ được giải quyết.


1
Đây IMO là giải pháp tốt nhất và đơn giản :)
gideon

Tất nhiên, nó yêu cầu bạn thực sự có quyền truy cập để thực hiện việc này trên máy chủ xây dựng.
Dave

1
... nhưng tại sao chúng ta phải làm điều này theo cách thủ công? Cảm ơn .. này cố định nó cho tôi trong VS21017 (Đối với tôi nó đã được cài đặt mới với VS2017 chỉ - Bây giờ tôi nghĩ đó là bởi vì tôi đã không được cài đặt IIS chưa)
Piotr Kula

Cũng hoạt động khi sao chép sang V14.0.
Uwe Keim,


8

Chà. Chúng tôi vừa thấy điều tương tự xảy ra trên máy xây dựng của chúng tôi. Chúng tôi sử dụng VS2010 và mục tiêu .NET 4.0. Các tệp dự án của chúng tôi nhập phiên bản v10.0 của các mục tiêu này một cách rõ ràng. Không có thay đổi nào đối với mã, ngày hôm qua bản dựng vẫn tốt và hôm nay nó không thành công với khiếu nại về phiên bản v11.0 bị thiếu. .NET Framework 4.5.1 đã được cài đặt / cập nhật đêm qua trên máy xây dựng này dưới dạng bản cập nhật tự động. Chúng tôi sẽ buộc v10.0 với tham số (hoặc biến env.), Nhưng điều này chắc chắn khiến chúng tôi ngạc nhiên ...

CẬP NHẬT: Điều kỳ lạ hơn nữa là có vẻ như trường hợp phiên bản msbuild hôm nay dường như đang sử dụng dòng đầu tiên của tệp sln để xác định VisualStudioVersion sẽ sử dụng theo mặc định, trong khi phiên bản ngày hôm qua thì không:

Format Version 12.00

Chúng tôi đã thử nghiệm thay đổi thủ công này thành 11 giờ và bản dựng bắt đầu hoạt động trở lại.

Trong trường hợp của chúng tôi, mặc dù chúng tôi đang nhắm mục tiêu và xây dựng mọi thứ cho 2010 / 4.0, một số nhà phát triển đã sẵn sàng cho VS2012 (vì MS tuyên bố rằng các tệp dự án tương thích) và giải pháp cụ thể này đã được lưu lần cuối (vài tháng trước) trong VS2012. Trước ngày hôm nay, điều đó không gây ra vấn đề.


1
Điều này đã giúp tôi nhiều hơn câu trả lời được bình chọn cao nhất dường như là về một tình huống hoàn toàn khác.
LambdaCruiser

Tương tự ở đây @LambdaCruiser, câu trả lời này đã giúp ích rất nhiều. Tôi đã xem lịch sử của tệp .sln của mình và dòng thứ 2 đọc # Visual Studio 2010dòng đầu tiên kết thúc Format Version 12.00vì ở một số giai đoạn tôi đã nâng cấp lên vs2012 nhưng chuyển qua lại vs2010. Giống như Wayne vấn đề này xảy ra sau khi chạy Windows Update trên máy chủ CI
wal

6

Tôi gặp vấn đề tương tự. Đã khắc phục bằng cách thực hiện các giải pháp được liệt kê ở trên. Sự cố là do phiên bản thích hợp của Công cụ Visual Studio (BuildTools) không có sẵn trên máy chủ Xây dựng. Như đã chỉ rõ ở trên, điều này có thể được giải quyết bằng cách cài đặt BuildTools nhưng không phải là tùy chọn trong trường hợp của tôi.

Đây là một giải pháp thay thế khác - sử dụng Nuget

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

Xác định dự án khởi động và Cài đặt web.targets dựa trên phiên bản Visual studio đang được sử dụng. Các tệp sau sẽ được sửa đổi bao gồm các thay đổi bắt buộc

Trong package.config:

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

Trong .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')" />

Hi vọng điêu nay co ich!!! Chúc may mắn,

Chúc mừng,


1
Câu trả lời hoàn hảo - loại bỏ nhu cầu khỉ với tệp csproj hoặc sao chép mọi thứ xung quanh trên máy chủ xây dựng. Đã làm việc trên nhiều phiên bản của Visual Studio và MSBuild 2017. Tuy nhiên, tôi đã xóa dòng "WebApplication.targets" theo cách thủ công - nuget không tự động xóa nó.
Gedas Kutka 21/02/18

3

Hack, nhưng đã giải quyết nó bằng cách sao chép: c: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplication *. * Sang c: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \Ứng dụng web*.*


1

Tôi đã gặp lỗi này vào cuối tháng 11 mà không thực hiện bất kỳ thay đổi nào đối với cấu hình cài đặt TeamCity hoặc cài đặt MSBuild hoặc mã nguồn. Trên máy chủ xây dựng của tôi, Visual Studio thậm chí còn chưa được cài đặt và thay đổi từ VS2010 thành VS2012 đã được thực hiện vào cuối tháng 8 mà không gặp bất kỳ sự cố nào vào thời điểm đó.

Phiên bản MSBuild của tôi là 4.0.30319.18408, máy chủ xây dựng của tôi là Windows Server 2008 R2 SP1 với TeamCity v6.5.3.

Tôi đã giải quyết vấn đề được cấp bằng cách sao chép thư mục v11 từ một máy chủ xây dựng khác mà không bị ảnh hưởng.

Tôi đoán rằng điều này có thể xảy ra theo hai cách:

  1. Một cái gì đó đã được cập nhật dẫn đến việc xóa thư mục v11. Nó có thể là một Windows Update cho .NET hoặc một cái gì đó?

  2. Một cái gì đó đã được cập nhật đã thay đổi cấu hình TeamCity / MSBuild của tôi từ sử dụng v10 sang v11 và các bản dựng ngừng hoạt động vì v11 chưa từng tồn tại.

Tôi đã nhận được bản cập nhật cho .NET Framework 4.5.1 vào ngày 3 tháng 12, đó có thể là lý do?

Brgds

Jonas


0

Gần đây tôi đã gặp vấn đề tương tự. Và kết luận của tôi là mọi phiên bản của VS (v10, v11, v12) đều thay đổi đường dẫn của biến xây dựng, giống như MSBuildBinPath.

Vì vậy, chỉ định phiên bản chính xác của VS không phải là một hack, vì bạn thậm chí có thể không cài đặt phiên bản tệp thích hợp. Vì vậy, bạn nên chỉ định một tham số và sử dụng các mục tiêu tồn tại trên máy của bạn.

Trong một số trường hợp hiếm hoi, bạn có thể cần cài đặt phiên bản cụ thể của gói VS và Web Deploy. Trong trường hợp của tôi, chỉ cần phiên bản là đủ để giải quyết vấn đề.


0

Bạn có thể thêm thuộc tính VisualStudioVersion như sau:

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

0

Khi tôi đang tìm cách giải quyết vấn đề này, hầu hết mọi người đều khuyên bạn nên sao chép thư mục MSBUILD bị thiếu hoặc cài đặt một số SDK của một số phiên bản.

May mắn thay, tôi đã tìm thấy bài đăng vô cùng hữu ích này của Donovan Brown: http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!

Tóm lại, ý tưởng là định cấu hình phiên bản VisualStudio mà bản dựng của bạn sẽ sử dụng trong Định nghĩa bản dựng:

Nhấp chuột phải -> "Chỉnh sửa định nghĩa bản dựng ..."

Đi tới "Procss" -> "3. Advanced"

và đặt "MSBuild Arguments" với

/p:VisualStudioVersion=12.0

Không thể tìm thấy "Chỉnh sửa định nghĩa bản dựng ..." trong VS2019
Laser42
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.