Không tìm thấy Microsoft.WebApplication.t Target trên máy chủ bản dựng. Giải pháp của bạn là gì?


410

Cố gắng xây dựng dự án của tôi trên máy chủ xây dựng cho tôi lỗi sau:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.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.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.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.

Tôi đã giải quyết vấn đề này vài tháng trước, với việc cài đặt Visual Studio 2010 trên Build Server. Nhưng bây giờ tôi đang thiết lập một máy chủ mới từ đầu và tôi muốn biết liệu có giải pháp nào tốt hơn để giải quyết vấn đề này không.


1
Các dự án ứng dụng web có bị phản đối không? Tôi tự hỏi lý do là gì khi yêu cầu các phiên bản cũ của Visual Studio để xây dựng chúng?
brianary

1
Hơn nữa, bạn có thực sự triển khai thông qua máy chủ xây dựng không? ví dụ: tôi không, tôi thậm chí còn có một dự án trình cài đặt web riêng biệt trong giải pháp ... và nó vẫn muốn điều đẫm máu này ... answer = xóa nó khỏi tệp proj! dễ dàng.
Paul Zahra

Liên quan chặt
Wai Ha Lee

1
Đã sửa bằng cách thay thế <Import Project="..\Packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />đường dẫn bằng $(VSToolsPath):<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
GJ

Câu trả lời:


207

Để trả lời tiêu đề của câu hỏi (nhưng không phải câu hỏi về đầu ra bạn nhận được):

Sao chép thư mục sau từ máy dev của bạn vào máy chủ bản dựng của bạn sẽ khắc phục điều này nếu đó chỉ là các ứng dụng web

C: \ Tệp chương trình (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplecting

Xóa x86 theo cách xây dựng của bạn phá vỡ. Nếu bạn có các loại dự án khác, có thể bạn sẽ cần phải sao chép toàn bộ thư mục msbuild.


11
Điều này đã làm việc cho m2 với một dự án VS2012, sau khi thay thế v10.0 thành v11.0
DenNukem

2
Chúng ta không thể cài đặt các công cụ MSBuild thay vì điều này? microsoft.com/en-us/doad/conf
Confirmation.aspx?id=40760

1
Than ôi, cài đặt các công cụ MSBuild là không đủ để xây dựng các dự án biên dịch tốt trong VisualStudio 2013
Michael Shaw

Tôi đã phải sao chép thư mục Web sang v11.0 để làm cho nó hoạt động sau khi cài đặt VS2013, nó bị thiếu ở đó. Có thể biên dịch trong VS nhưng không trực tiếp thông qua MSBUILD.
Martin Braun

9
làm việc cho VS2017. chỉ cần sao chép C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ vXX.0 \ WebApplifying vào C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \
WebApplecting

95

Xây dựng và xuất bản WAP không được hỗ trợ nếu VS không được cài đặt. Như đã nói, nếu bạn thực sự không muốn cài đặt VS thì bạn sẽ cần sao chép tất cả các tệp bên dưới %ProgramFiles32%\MSBuild\Microsoft\.

Bạn cũng sẽ cần phải cài đặt Công cụ Triển khai Web . Tôi nghĩ rằng đó là nó.


4
Nói - xem câu trả lời dưới đây từ dans Something - câu trả lời của bạn có đúng không? Ngay cả khi cài đặt gói VS 2010 Shell Integration và .NET SDK sẽ không cài đặt chính xác hỗ trợ dự án Ứng dụng Web?
Adam

@SayedIbrahimHashimi bạn có phải đăng ký DLL với GAC nếu bạn sao chép thư mục thủ công không?
TheOptimusPrimus

Và những gì về Microsoft.TextTemplating.t Target? Tôi phải làm gì để có được chúng trong thư mục của họ? C: \ Tệp chương trình (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0
Nhà phát triển

@ClarkKent, xin lỗi tôi không thể nói với tệp TextTemplating. Tôi không quen thuộc với những người đó.
Nói Ibrahim Hashimi

77

CẬP NHẬT: kể từ VS2017, có khối lượng công việc trong Build Tools giúp loại bỏ hoàn toàn vấn đề này. Xem câu trả lời @SORhead .

Nếu bạn không muốn sửa đổi bất cứ điều gì trên máy chủ xây dựng và bạn vẫn muốn dự án xây dựng ngoài tầm kiểm soát nguồn, thì có thể nên đặt các nhị phân cần thiết dưới sự kiểm soát nguồn. Bạn sẽ cần sửa đổi phần nhập trong tệp dự án của bạn để trông như thế này:

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

Dòng đầu tiên là nhập thực tế từ vị trí mới có liên quan đến thư mục giải pháp. Phiên bản thứ hai là phiên bản tắt (Condition="false" ) của dòng ban đầu cho phép Visual Studio vẫn coi dự án của bạn là Dự án ứng dụng web hợp lệ (đó là thủ thuật mà VS 2010 SP1 tự thực hiện).

Đừng quên sao chép C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplicationsvào BuildTargetsthư mục dưới sự kiểm soát nguồn của bạn.


Giải pháp này hiệu quả với tôi và thực sự là lựa chọn tốt nhất trong trường hợp của tôi. Điều này là do tôi không có quyền truy cập vào máy chủ xây dựng. Tôi đang sử dụng cây đàn hồi của Atlassian để tạo ra một máy chủ mới để hoạt động như một máy chủ xây dựng. Thoạt nhìn không thấy rằng các AMI này bao gồm các mục tiêu Ứng dụng Web ?? Điều đó không có ý nghĩa với tôi nhưng đó là cách nó có vẻ.
Cody Clark

1
Đây là một aproach tốt, nhưng thay đổi này yêu cầu mỗi tệp csproj phải được thay đổi. Thật khó khăn nếu bạn thêm các dự án mới vào giải pháp. Tất nhiên nó có thể được giải quyết bằng các mẫu dự án tùy chỉnh, nhưng vẫn .. Dù sao, câu trả lời này đã chỉ cho tôi đi đúng hướng. cảm ơn!
100r

76

Ngay bây giờ, vào năm 2017, bạn có thể cài đặt các trình tái tạo WebApplication với MSBuildTools. Chỉ cần truy cập trang này sẽ tải xuống Công cụ MSBuild 2017 và trong khi cài đặt, nhấp vào Web development build toolsđể cài đặt các mục tiêu này: enter image description here

Điều này sẽ dẫn đến việc cài đặt các thư viện bị thiếu C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationstheo mặc định


2
Tôi khá ngạc nhiên, rằng năm tuổi của tôi về việc đóng gói lib vào kiểm soát nguồn và nó đã được sửa đổi ngay cả ngày hôm nay, trong khi điều này là chính xác.
Andriy K

2
@AndriyK Giải pháp của bạn hơi khác so với những gì tôi đề xuất và tôi hiểu tại sao ai đó có thể thích bạn hơn tôi ... trừ khi đó chỉ là sự lười biếng; D
SOReader

2
Để làm cho điều này tổng quát hơn, đối với các phiên bản tương lai của Visual Studio, bạn có thể tải xuống Công cụ xây dựng mới nhất từ visualstudio.microsoft.com/doads Cuộn xuống trang và gần phía dưới mở rộng phần "Công cụ cho Visual Studio", sau đó tải xuống " Xây dựng công cụ cho Visual Studio ". Hiện tại những thứ này là dành cho VS 2017 nhưng tôi cho rằng nó sẽ giống với các phiên bản trong tương lai. Nhân tiện, nếu bạn cần đường dẫn đến msbuild.exe cho công cụ CI của bạn (ví dụ Jenkins), thì với VS 2017, nó sẽ được cài đặt tại C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Thùng \ msbuild.exe.
Simon Tewsi

2
Cách tương thích xây dựng-máy chủ (đọc: dòng lệnh) để thực hiện việc này là choco install visualstudio2017-workload-webbuildtools.
Paul Hicks

1
Cũng lưu ý rằng "Web phát triển xây dựng các công cụ" gói , Microsoft.VisualStudio.Workload.WebBuildToolscó thể được cài đặt thông qua dòng lệnh bằng cách gọi vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools. Thêm --passivevào không cần sự can thiệp của người dùng.
Ái Hà Lee

70

Bạn cũng có thể sử dụng gói NuGet MSBuild.Microsoft.VisualStudio.Web.target , tham chiếu chúng trong (các) dự án Visual Studio của bạn, sau đó thay đổi các tài liệu tham khảo của bạn như gợi ý của Andriy K.


2
Không thể sử dụng vì tôi phải mở giải pháp trước nhưng tôi không thể vì lỗi.
Nhà phát triển

Nếu có nhiều hơn một dự án trong giải pháp, bạn vẫn có thể 1. mở giải pháp - bỏ qua rằng dự án web không tải; 2. thêm tài liệu tham khảo nuget; 3. thực hiện một trong những cách tiếp cận được đề cập sau đó; bạn có thể chỉnh sửa thủ công tệp dự án hoặc ghi đè biến env.VSToolsPath trong TeamCity.
Damon

1
Đây có phải là một gói nuget MS được phát hành chính thức, hay ai đó vừa mới tạo ra nó?
Simon_Weaver

giải pháp tuyệt vời - hoạt động cho các phiên bản khác nhau của VS. Tôi cần chỉnh sửa tệp .csproj, YMMV
Jonno

39
Đây không phải là một gói nuget Microsoft được phát hành chính thức. Tôi biết nó bởi vì tôi đã tạo ra nó.
mak

54

Dựa trên bài đăng này tại đây, bạn có thể chỉ cần tải xuống Gói phân phối lại Microsoft Visual Studio 2010 Shell (Tích hợp) và các mục tiêu đã được cài đặt.

Điều này tránh sự cần thiết phải cài đặt Visual Studio trên máy chủ xây dựng.

Tôi mới thử cái này bây giờ và có thể xác minh rằng nó hoạt động:

Trước:

lỗi MSB4019: Không tìm thấy dự án đã nhập "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebAppluggest \ Microsoft.WebApplication.t Target". Xác nhận rằng đường dẫn trong khai báo là chính xác và tệp tồn tại trên đĩa.

Sau khi cài đặt:

[Xây dựng chính xác]

Đây rõ ràng là một giải pháp tốt hơn nhiều so với việc cài đặt Visual Studio trên máy chủ xây dựng.


7
Đây là giải pháp IMO đơn giản và dễ dàng nhất. Tôi đang sử dụng VS 2013 và tôi thấy rằng Visual Studio 2013 Shell (Bị cô lập) Redistributable là những gì đã hoạt động (Tích hợp sẽ không cài đặt do phụ thuộc vào biệt lập).
Matt Miller

@MatthewSkelton - Ý nghĩa của việc xây dựng máy chủ là gì?
Mohammed Zameer

2
@BountyMan - máy chủ xây dựng là máy chủ đảm nhận hoặc kiểm soát các bản dựng tích hợp liên tục (CI) của phần mềm. Ví dụ: Jenkins, TeamCity, CruiseControl, v.v.
Matthew Skelton

3
Thật không may với VS v14.0, cách cài đặt gói là thông qua nuget nhưng vì vấn đề của tôi là máy chủ xây dựng không cài đặt VS (chỉ MSBuild), nên việc cài đặt gói không thể thực hiện được. Tôi đã dành hàng giờ để dò dẫm với PowerShell và nhiều cài đặt Nuget được hỗ trợ một nửa trước khi chỉ cần sao chép thư mục từ PC sang máy chủ.
pasx

1
@pasx Nếu thông báo lỗi chứa "v14", bạn có thể cài đặt Visual Studio 2015 Shell Shell thay thế, hãy làm việc cho tôi - visualstudioextensibility.com/doads/vs-shells (trong "Tải xuống URL"; có một khảo sát bắt buộc, hãy tận hưởng!)
Dunc

38

SDK Windows mới nhất, như đã đề cập ở trên, ngoài "Gói phân phối lại Microsoft Visual Studio 2010 Shell (Tích hợp)" cho Microsoft.WebApplication.target và "Phiên bản cơ sở dữ liệu Microsoft Visual Studio Team System 2008 GDR R2" cho Microsoft.Data.Schema .SqlT task.target sẽ giảm bớt nhu cầu cài đặt Visual Studio 2010. Tuy nhiên, việc cài đặt VS 2010 thực sự có thể ít tổng thể hơn để tải xuống và cuối cùng ít công việc hơn.


FYI - Nếu bạn đang cố gắng xây dựng các dự án Sql trên máy chủ xây dựng mà không cài đặt đầy đủ VS, bạn sẽ không gặp may với trình cài đặt GDR R2 của Hệ thống cơ sở dữ liệu Team System 2008 được đề cập ở đây. Yêu cầu trước đó là Visual Studio Team System 2008 Database Edition SP1 (tiếng Anh) hoặc Visual Studio Team System 2008 Suite SP1 (tiếng Anh) VÀ Visual Studio 2008 Gói dịch vụ 1. Dường như bạn có thể sao chép SqlServer.target ra khỏi .NET Framework \ thư mục v4 và msbuild TeamData nhắm mục tiêu các tệp trong \ tệp chương trình \ msbuild \ microsoft \ visual studio \ v10.0 \ và csprojs của bạn sẽ được xây dựng.
Ethan J. Brown

Đó chắc chắn không phải là giải pháp đẹp nhất, nhưng với tôi thời gian là quan trọng nhất. Chỉ cần sao chép qua thư mục MSBuild sẽ dẫn đến nhiều vấn đề hơn cho tôi.

21
Đây là một câu trả lời thực sự quan trọng bởi vì nếu bạn là nhà phát triển độc lập thiết lập máy chủ xây dựng cho khách hàng, bạn không muốn khách hàng phải duy trì giấy phép Visual Studio để có thể xây dựng phần mềm của họ.
thelsdj

Tôi chỉ cần gói tích hợp vỏ VS2010 và EntLib 5 để khai thác. Không cần hệ thống đội.
Robin Winslow

1
Shell 2010 2010 không còn có sẵn tại liên kết đó, "Tài nguyên bạn đang tìm kiếm đã bị xóa, tên của nó đã bị thay đổi hoặc tạm thời không có."
kristianp

22

Thêm phụ thuộc thông qua NuGet và đặt Tham số bản dựng

Mục tiêu: không có thay đổi / cài đặt cần thiết cho các tác nhân xây dựng

Tôi đã thực hiện một cách tiếp cận hỗn hợp với cách tiếp cận NuGet của Lloyd ở đây , dựa trên giải pháp phụ thuộc nhị phân cam kết của Andrik.

Lý do tại sao tôi muốn có thể thêm các tác nhân xây dựng mới mà không phải cấu hình trước chúng với các mục như thế này.

  1. Trên máy có Visual Studio, Mở giải pháp; bỏ qua rằng dự án web thất bại.
  2. Trong trình quản lý gói NuGet, thêm MSBuild.Microsoft.VisualStudio.Web.t Target , như Lloyd đã đề cập.
  3. Điều này sẽ giải quyết các nhị phân để [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
    1. Bạn có thể sao chép chúng vào thư mục tài liệu tham khảo & commit
    2. Hoặc chỉ sử dụng chúng ở nơi họ đang ở. Tôi đã chọn cái này, nhưng tôi sẽ phải xử lý số phiên bản trong đường dẫn sau.

Trong phiên bản 7, tôi đã làm như sau. Điều này có thể không cần thiết, và dựa trên các ý kiến ​​chắc chắn là không cần thiết bây giờ. Xin vui lòng xem các ý kiến ​​dưới đây.

  1. Tiếp theo, trong cấu hình bản dựng TeamCity của bạn, hãy thêm một bản dựng Paramenter cho env.VSToolsPathvà đặt nó vào thư mục VSToolsPath; Tôi đã sử dụng..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath

8
không cần thực hiện bước 4, nếu bạn chỉ cần thay thế phần tử <Nhập> trong tệp dự án của mình bằng tệp này:<Import Project="..\..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.12.0.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />
knocte

Đây phải là câu trả lời được chấp nhận ... và điểm 4 sẽ bị xóa.
Izzy

@Izzy cảm ơn, bạn đã làm bình luận như knocte chỉ ra thay thế? Tôi đã không sử dụng TC trong một vài năm, phiên bản 7 iirc.
Damon

@Damon Tôi đang sử dụng Jenkins chứ không phải TC, vì vậy đó có thể là lý do tại sao tôi không cần điểm cuối cùng của bạn.
Izzy

21

Khi xây dựng trên máy chủ build / CI, hãy tắt nhập Microsoft.WebApplication.targetshoàn toàn bằng cách chỉ định /p:VSToolsPath=''. Về cơ bản, điều này sẽ làm cho điều kiện của dòng sau sai:

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


Đây là cách nó được thực hiện trong TeamCity:

nhập mô tả hình ảnh ở đây


Xây dựng mục tiêu là cần thiết nếu bạn đang sử dụng cơ chế "Xuất bản" của Visual Studio. Làm điều này cho phép quá trình biên dịch tiến hành và hoàn thành, nhưng, nó có thể không đầy đủ.
starlocke

14

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

Thay đổi giá trị của nó từ 4.0 thành 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

Nguồn giải pháp


4
Việc thêm /p:VisualStudioVersion=12.0 vào MSBuild Argument trong định nghĩa bản dựng TFS 2013 (đối với một giải pháp được tạo trong Visual Studio 2013) đã có hiệu quả đối với tôi. Vì một số lý do, nó sẽ tìm các tệp trong thư mục v11.0 mà không có tham số nào.
Sacha K

3
Giải pháp này hiệu quả với tôi, tôi đã sử dụng lệnh đó:msbuild /p:Platform=x86 /p:VisualStudioVersion=12.0
E.Meir

9

Có vẻ như phiên bản mới của msbuild không được phát hành với Microsoft.WebApplication.t Target. Để khắc phục, bạn cần cập nhật tệp csproj của mình như vậy:

1) Chỉnh sửa ứng dụng web csproj (nhấp chuột phải). Tìm phần trong csproj về phía dưới liên quan đến các công cụ xây dựng. Nó sẽ trông như vậy.

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2) Bạn cần thêm một dòng VSToolsPath bên dưới thẻ VisualStudioVersion để nó trông giống như vậy

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

Liên kết tham khảo: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/


8

Đây là tất cả những gì bạn cần. Chỉ 103MB. Đừng cài đặt mọi thứ

nhập mô tả hình ảnh ở đây


Làm thế nào tôi có thể đánh dấu vào biểu mẫu đó mà không cần cài đặt gì?
Christian

5

Tôi đã tìm thấy điều này trên MS kết nối :

Có, bạn cần cài đặt Visual Studio 2010 trên máy dựng của mình để xây dựng các dự án cơ sở dữ liệu. Làm như vậy không cần giấy phép bổ sung của Visual Studio.

Vì vậy, đây là lựa chọn duy nhất mà tôi có bây giờ.


2
Các liên kết dường như bị phá vỡ.
vỡ mộng

2

Giải pháp của tôi là sự kết hợp của một số câu trả lời ở đây.

Tôi đã kiểm tra máy chủ xây dựng và SDK Windows7 / NET4.0 đã được cài đặt, vì vậy tôi đã tìm thấy đường dẫn:

C: \ Tệp chương trình (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebAppluggest \ Microsoft.WebApplication.t Target`

Tuy nhiên, trên dòng này:

<Nhập dự án = "$ (MSBuildExtensionsPath) \ Microsoft \ VisualStudio \ v9.0 \ WebAppluggest \ Microsoft.WebApplication.t Target" />

$ (MSBuildExtensionsPath) mở rộng thành C: \ Program Files \ MSBuild không có đường dẫn.

Do đó, những gì tôi đã làm là tạo một symlink, sử dụng lệnh này:

mklink / J "C: \ Tệp chương trình \ MSBuild \ Microsoft \ VisualStudio" "C: \ Chương trình tệp (x86) \ MSBuild \ Microsoft \ VisualStudio"

Bằng cách này, $ (MSBuildExtensionsPath) mở rộng thành một đường dẫn hợp lệ và không cần thay đổi trong chính ứng dụng, chỉ trong máy chủ xây dựng (có lẽ người ta có thể tạo liên kết tượng trưng cho mọi bản dựng, để đảm bảo bước này không bị mất và được "ghi lại ").


2

Tôi đã sửa lỗi này bằng cách thêm
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"

vào
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments


2

Tôi đã thử một loạt các giải pháp, nhưng cuối cùng câu trả lời này đã có hiệu quả với tôi: https://stackoverflow.com/a/19826448/431522

Về cơ bản, nó đòi hỏi phải gọi MSBuild từ thư mục MSBuild, thay vì thư mục Visual Studio.

Tôi cũng đã thêm thư mục MSBuild vào đường dẫn của mình, để làm cho các kịch bản mã dễ dàng hơn.


2

Bất cứ ai đến đây cho Visual Studio 2017. Tôi gặp vấn đề tương tự và không thể biên dịch dự án sau khi cập nhật lên 15.6.1. Tôi đã phải cài đặt các công cụ MSBulild nhưng vẫn còn lỗi.

Tôi đã có thể khắc phục sự cố bằng cách sao chép v14.0thư mục từ C:\Program Files (x86)\MSBuild\Microsoft\VisualStudiovào cùng thư mục v15.0và điều đó đã giải quyết tất cả các lỗi. Vì vậy, bây giờ cấu trúc thư mục của tôi trông như dưới đây, nơi cả hai thư mục chứa cùng một nội dung.

nhập mô tả hình ảnh ở đây


2

Nếu bạn đang sử dụng MSBuild, như trong trường hợp máy chủ xây dựng, điều làm việc cho tôi là:

Thay đổi như sau:

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

đến:

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

Lệnh Msbuild của tôi là: *"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

Hy vọng điều này sẽ giúp được ai đó.


để đề cập, các thay đổi nên được thực hiện đối với các tệp .csproj, vbproj vi phạm.
Colin Q

0

Trong trường hợp nếu bạn đang cố gắng triển khai một dự án bằng VSTS, thì vấn đề có thể được kết nối với việc kiểm tra tùy chọn "Hosted Windows Container" thay vì "Hosted VS2017" (hoặc 18, v.v.):

nhập mô tả hình ảnh ở đây


0
  • Sau khi cài đặt các công cụ MSBuild từ Microsoft, hãy xác định đường dẫn MSBuild trong biến môi trường để nó có thể chạy từ bất kỳ đường dẫn nào.
  • Chỉnh sửa tệp .csproj trong mọi trình chỉnh sửa notepad như notepad ++ và nhận xét
  • Kiểm tra các yếu tố sau, ->
    • Hãy chắc chắn rằng bạn chỉ sử dụng nhập một lần, chọn bất kỳ hoạt động.
    • Đảm bảo rằng bạn có thư mục sau tồn tại trên ổ đĩa, "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0" hoặc bất kỳ phiên bản nào được tham chiếu bởi mục tiêu MSBuild tại "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebAppluggest \ Microsoft.WebApplication.t Target "
    • Từ dấu nhắc lệnh, chạy lệnh sau, để kiểm tra

C:> msbuild "C: \\ DotnetCi.sln" / p: Cấu hình = Phát hành / p: Sử dụngWPP_CopyWebApplication = true / p: PipelineDependsOnBuild = false


0

Tôi gặp vấn đề này khi xây dựng dự án SQL Server trên đường ống CI / CD. Trên thực tế, tôi cũng đã có nó ở địa phương và tôi đã không quản lý để giải quyết nó.

Điều làm việc cho tôi là sử dụng SDK MSBuild , có khả năng tạo gói Ứng dụng Cấp dữ liệu SQL Server ( .dacpac) từ một tập lệnh SQL, ngụ ý tạo ra một dự án mới. Nhưng tôi muốn giữ dự án SQL Server, để tôi có thể liên kết nó với cơ sở dữ liệu trực tiếp thông qua SQL Server Object Explorer trên Visual Studio. Tôi đã thực hiện các bước sau để có được điều này và chạy:

  1. Giữ dự án SQL Server của tôi với các .sqltập lệnh cơ sở dữ liệu.
  2. Tạo một dự án thư viện lớp .NET Standard 2.0, đảm bảo rằng khung đích là .NET Standard 2.0, theo các hướng dẫn trong liên kết trên.
  3. Đặt nội dung .csprojnhư sau:

    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="MSBuild.Sdk.SqlProj/1.0.0">
      <PropertyGroup>
        <SqlServerVersion>Sql140</SqlServerVersion>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    </Project>
  4. Tôi đã chọn Sql140 làm phiên bản SQL Server vì tôi đang sử dụng SQL Server 2019. Kiểm tra câu trả lời này để tìm ra ánh xạ tới phiên bản bạn đang sử dụng.

  5. Bỏ qua dự án SQL Server khi xây dựng, để nó dừng vi phạm cục bộ (nó xây dựng trên Visual Studio, nhưng nó không thành công trên Mã VS).

  6. Bây giờ chúng ta chỉ cần đảm bảo các .sqltệp nằm trong dự án SDK khi nó được xây dựng. Tôi đã đạt được điều đó với một thói quen quyền hạn đơn giản trên đường ống CI / CD sẽ sao chép các tệp từ dự án SQL Server sang dự án SDK:

Copy-Item -Path "Path.ToThe.Database.Project \ dbo \ Bàn \ *" -Destination (New-item -Name "dbo \ Desk" \ ")

PS: Các tệp phải nằm trong dự án SDK, trong thư mục gốc hoặc trên một số thư mục, vì vậy các liên kết đến các .sdktệp trong dự án SQL Server sẽ không hoạt động. Về lý thuyết, có thể sao chép các tệp này với điều kiện dựng sẵn, nhưng vì một số lý do mơ hồ, điều này không hiệu quả với tôi. Tôi cũng đã cố gắng để có các .sqltệp trong dự án SDK và liên kết chúng với dự án SQL Server, nhưng điều đó sẽ dễ dàng phá vỡ liên kết với SQL Server Object Explorer, vì vậy tôi cũng quyết định bỏ nó.

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.