Chạy MSBuild không đọc được SDKToolsPath


130

Thật đáng tiếc, tôi có một chút vấn đề khi chạy tập lệnh NAnt được sử dụng để xây dựng trang web dựa trên .Net 2.0 của tôi, khi biên dịch với VS2008 và các công cụ liên quan. Gần đây tôi đã nâng cấp tất cả các tệp dự án / giải pháp lên VS2010 và hiện tại bản dựng của tôi không thành công với lỗi sau:

[exec] C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.target (2249,9): lỗi MSB3086: Tác vụ không thể tìm thấy "sgen.exe" bằng S dkToolsPath "" hoặc đăng ký khóa "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A". Đảm bảo SdkToolsPath được đặt và công cụ tồn tại ở vị trí cụ thể của bộ xử lý chính xác trong SdkToolsPath và SDK Microsoft Windows đã được cài đặt

Bây giờ, tôi đã cài đặt các phiên bản trước (.Net 3.5) của SDK Windows trên máy chủ bản dựng và khung .Net 4.0 đầy đủ đã được cài đặt, nhưng tôi không chạy trên phiên bản Windows SDK cụ thể .Net 4.0.

Sau một chút thử nghiệm và nghiên cứu, cuối cùng tôi cũng chỉ cần thiết lập một biến môi trường mới "SDKToolsPath" và chỉ nó vào bản sao của sgen.exe trong thư mục sdk windows 6.0 của tôi. Điều này tạo ra cùng một lỗi, nhưng tôi nhận thấy rằng mặc dù đã đặt biến môi trường SDKToolsPath (xác nhận rằng tôi có thể "lặp lại" nó ở dòng lệnh và nó có giá trị như mong đợi), thông báo lỗi dường như chỉ ra rằng nó không được đọc (lưu ý các trích dẫn trống).

Hầu hết các thông tin tôi tìm thấy là .Net 3.5 (hoặc sớm hơn) cụ thể. Không có nhiều 4.0 liên quan ra khỏi đó. Tìm kiếm mã lỗi MSB3086 cũng không có gì hữu ích. Có ý tưởng nào không?

Scott


Vấn đề liên quan trong bài này. Tôi đã đăng một câu trả lời ở đó là tốt. stackoverflow.com/questions/1109955/ trộm
Diego C.

Câu trả lời:


15

Tôi đã phải cắn viên đạn và cài đặt VS 2010 trên máy chủ xây dựng của chúng tôi để khắc phục vấn đề này. Theo như tôi có thể thấy, không có phiên bản 7.0A nào của Windows SDK có sẵn ở bất cứ đâu trên MSDN. Tuy nhiên, cài đặt VS 2010 dường như để cài đặt nó, tạo regkey 7.0A và thư mục 7.0A trong Chương trình Files \ Microsoft SDKs \ Windows.


9
Tôi không thích cài đặt Visual Studio 2010 trên máy chủ. Tôi thích đề xuất của Simmo bên dưới về việc đặt SDK Windows hiện tại thành v7.1. WindowsSdkVer.exe được đặt trong C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Setup (giả sử nó đã được cài đặt vào C: \ Program Files).
Philippe

55
Tôi đã thấy rằng nếu bạn chỉ cài đặt Windows SDK 7.1 và .NET 4.0. MSBuild không đặt đường dẫn thích hợp cho SDK40ToolsPath và SDK35ToolsPath. Để khắc phục, tôi đã phải thay đổi một vài mục trong HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0: "SDK40ToolsPath" = "$ (Đăng ký: HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Microsoft SDKs \ Windows \\ v7 .1 \\ WinSDK-NetFx40Tools-x86 @ InstallerFolder) "Thay đổi tương tự" v7.0A "thành" v7.1 "trong SDK35ToolsPath và FrameworkSDKRoot.
BlueMonkMN

7
Sheesh - Tôi lại gặp vấn đề tương tự một lần nữa, googled cho nó và tìm thấy câu trả lời của riêng tôi! :) Một cái gì đó dường như đã thiết lập lại sự thay đổi của tôi và tôi đoán rằng tôi phải áp dụng lại nó một cách thủ công.
BlueMonkMN

3
ARRRGH! Các bản vá .NET 4.0 mới nhất (2011-08-11) ghi đè lên các cài đặt đăng ký này!
si618

8
Cập nhật phản hồi trước đó của tôi. Dường như trên các HĐH 64 bit, cũng có thể cần phải cập nhật các giá trị tương tự trong HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 và có thể cần phải cài đặt SDK 8.0 hoặc cập nhật các giá trị trong HKEY_LOCAL_MACHINE PHẦN MỀM \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 và HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 Tôi đã thực hiện tất cả các thao tác trên trừ khi cài đặt SDK 8.0 và không thể biên dịch cho đến khi tôi cài đặt bước) bao gồm các cập nhật của tôi cho tất cả các nút 4.0 \ 11.0.
BlueMonkMN

227

Tôi không thể đối mặt với việc đưa Visual Studio lên máy chủ xây dựng.

SDK v7.0A là SDK được cài đặt với Visual Studio 2010 (Chữ A cho biết đây là bản phát hành VS). Kể từ đó, một phiên bản mới hơn đã được phát hành. Microsoft Windows SDK cho Windows 7 và .NET Framework AKA v7.1 .

Tôi đã cài đặt nó trên máy chủ xây dựng của tôi. Và sau đó thông qua Dấu nhắc lệnh Windows SDK 7.1 (Bắt đầu => Tất cả chương trình => Microsoft Windows SDK 7.1), tôi đặt phiên bản mặc định của SDK là 7.1.

Các bước:

cd Setup

WindowsSdkVer.exe -version:v7.1

Chỉnh sửa để bao gồm nhận xét của LordHits: người ta không cần phải cài đặt toàn bộ SDK. Chỉ cài đặt các tùy chọn ".NET Development / Intellisense and Reference Assemblies" và ".NET Development / Tools" là đủ.


4
Điều này hoạt động hoàn hảo với tôi, kết hợp với sao chép qua các tệp vào C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplecting từ máy VS của tôi.
dnolan

1
Tôi đã phải đối mặt với cùng một vấn đề như tác giả ban đầu và câu trả lời này đã giải quyết nó! Tôi không phải cài đặt Visual Studio 2010 trên máy Build của mình.
SolutionYogi

37
Ngoài ra, chỉ cần làm rõ, người ta không cần phải cài đặt toàn bộ SDK. Chỉ cài đặt các tùy chọn ".NET Development / Intellisense and Reference Assemblies" và ".NET Development / Tools" là đủ. Điều này và sao chép các tập tin từ bình luận của dnolan.
LordHits

Cảm ơn giải pháp này, nó hoạt động hoàn hảo cho tôi trên máy chủ xây dựng của chúng tôi! FYI- cho bất cứ ai có thể đặt câu hỏi, máy chủ xây dựng là Windows Server 2008 x64.
Adam Weber

Cảm ơn rất nhiều vì câu trả lời này; gặp vấn đề tương tự trong công việc với điều này là tốt.
Abe

20

Chỉ cần chuyển tham số GenerateSerializationAssemblies với giá trị Tắt cho MsBuild của bạn.

msbuild.exe /p:GenerateSerializationAssemblies=Off

7
msbuild.exe / p: GenerateSerializationAssemblies = Off
Daniel

2
Hoặc đặt "Tạo cụm tuần tự hóa: Tắt" trong tab Xây dựng thuộc tính dự án của dịch vụ web.
samneric

6
Điều này làm gì chính xác?
nghiền nát

1
GOTCHA: Nếu bạn tắt nó trên tab xây dựng, hãy đảm bảo bạn làm điều này cho cấu hình bản dựng có liên quan, (DropDown ở đầu tab Build) trong trường hợp của tôi, đó chỉ là máy chủ bản dựng có vấn đề, vì vậy tôi phải thay đổi điều này trong cấu hình 'Phát hành'.
Bí ẩn

14
Tôi thích chỉ ngẫu nhiên chuyển đổi cờ xây dựng mà không có manh mối những gì họ thực sự làm.
AaronLS

14

Tôi tự chuyển các biến cho MSBuild trên máy chủ xây dựng.

msbuild.exe MyProject.csproj "/p:TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools" "/p:AspnetMergePath=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"

1
Đây là những gì tôi đã làm cho Windows 10 SDK trong một máy chủ không có Visual Studio và Build Tools 2019. Không có giải pháp nào khác có vẻ hữu ích và giải pháp này đã thực hiện thủ thuật một cách sạch sẽ.
Nicolás Fantone

8

Tôi đã gặp một vấn đề tương tự chỉ gần đây trên máy chủ xây dựng của chúng tôi.

Tôi đã sao chép thư mục 7.0A (C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A) từ máy tính của tôi (đã cài đặt VS2010) vào máy chủ xây dựng ở cùng vị trí.

Sau khi tạo khóa đăng ký sau: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A. Đặt InstallerFolder thành C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A.

Bạn cũng có thể tham chiếu sổ đăng ký trên máy của mình với VS2010 đã được cài đặt trên nó nếu bạn bối rối không biết phải làm gì với sổ đăng ký trên máy chủ bản dựng.


Đối với tôi, câu trả lời của Simmo không hoạt động - bản hack registry này đã làm được (Win 2K3 SP2).
FinnNk

7

Tôi đã gặp cùng một lỗi nhưng trong một tình huống khác: sử dụng VS 2010 Express và cố gắng sử dụng câu trả lời của Simmo để đặt rõ ràng phiên bản SDK - tuy nhiên WindowsSdkVer.exe (công cụ thiết lập phiên bản) dường như không nhắm mục tiêu Express (có thể hiểu được vì nó bị giới hạn ).

Tôi đang sử dụng VS 2010 Express trên Win 7 GS và nó luôn muốn sử dụng v7.0A của SDK Win (không có tất cả các phiên bản cần thiết) và không có vấn đề gì tôi đặt rõ ràng là phiên bản hiện tại sử dụng WindowsSdkVer.exe (Nó tiếp tục báo cáo nó đặt phiên bản hiện tại của SDK nhưng cho VS 2008 mặc dù tôi chỉ cài đặt 2010 Ex.)

Vì vậy, cách giải quyết giá rẻ của tôi là cài đặt v7.0 WIN SDK (hoặc phiên bản khác như v7.1) và sau đó đổi tên thư mục hệ thống tệp của nó thành v7.0A - về cơ bản tôi chỉ nói dối với VS 2010 Express nhưng hiện tại nó đã hoạt động!


5

Một trong những dự án của bạn sử dụng sgen.exe (Trình tạo máy chủ) để tạo dịch vụ web. bạn cần cài đặt SDK để Build Server hoặc xóa tham chiếu Dịch vụ web khỏi dự án.


1
Hoặc đặt "Tạo cụm tuần tự hóa: Tắt" trong tab Xây dựng thuộc tính dự án của dịch vụ web.
samneric

1
GOTCHA: Nếu bạn tắt nó trên tab xây dựng, hãy đảm bảo bạn làm điều này cho cấu hình bản dựng có liên quan, (DropDown ở đầu tab Build) trong trường hợp của tôi, đó chỉ là máy chủ bản dựng có vấn đề, vì vậy tôi phải thay đổi điều này trong cấu hình 'Phát hành'.
Bí ẩn

4

Tôi nghi ngờ tệp mục tiêu đang ghi đè đường dẫn công cụ, tôi đã xem nhanh tệp này và đặt SDKToolsPath thành $ TargetFrameworkSDKToolsDirectory theo một số mục tiêu trong đó. Tôi không nghĩ rằng bạn cần phải thiết lập những thứ này trong môi trường, nhưng chúng có thể cần sửa trong các tệp dự án của bạn.

Lưu ý rằng theo trang này http://nant.sourceforge.net/ Nant không hỗ trợ .Net 4.0, đây có thể là vấn đề thực sự không?

Xin lỗi, tôi biết điều này không thực sự trả lời câu hỏi của bạn :(


Đúng, NAnt chưa hỗ trợ các định dạng tệp dự án / giải pháp cho VS2010, đó là lý do tại sao tôi gọi cho MSBuild cho bước biên dịch thực tế. Sẽ kiểm tra các tập tin mục tiêu.
Scott Mayfield

4

Tôi gặp vấn đề tương tự trên một máy Windows 10 hoàn toàn mới. Thiết lập của tôi:

  • Windows 10
  • Đã cài đặt Visual Studio 2015
  • SDK Windows 10

Nhưng tôi không thể xây dựng các dự án .NET 4.0:

Die Aufgabe konnte "AL.exe" mit dem SdkToolsPath-Wert "" oder dem Đăng kýungssssll

Giải pháp: Sau khi thử (và không thành công) để cài đặt SDK Windows 7 (vì đó cũng bao gồm SDK .NET 4.0) Tôi cần cài đặt SDK Windows 8 và đảm bảo ".NET Framework 4.5 SDK" đã được cài đặt.

Thật điên rồ ... nhưng đã làm việc.


Điều này chính xác cũng giúp tôi trên Windows 10.
bourbert

3

Bạn thực sự chưa cài đặt SDK phiên bản 7.0A? Đó là một vấn đề bạn sẽ cần phải sửa chữa. Xem trong tệp nhật ký cài đặt VS2010 để xem có vấn đề gì. SDK phải có trong c: \ chương trình tập tin \ microsoft sdks \ windows \ 7.0a và khóa đăng ký được liệt kê cũng phải có mặt. Chạy với phiên bản 6.0a của sgen.exe không ổn, nhất định sử dụng trình biên dịch sai.


1
Hãy nhớ rằng, đây là một máy chủ xây dựng, vì vậy cài đặt môi trường VS2010 hoàn chỉnh không phải là lựa chọn đầu tiên của tôi. Tôi không thể tìm thấy bất kỳ bản tải xuống có sẵn nào của Windows SDK 7.0a
Scott Mayfield

3
Tôi không thấy vấn đề. Chạy bản dựng trên máy có cấu hình không khớp với máy dev, đó là vấn đề sẽ khiến bạn nhanh chóng bị hao mòn.
Hans Passant

3

Đặt Sdk40ToolsPaththay vì SdkToolsPathchỉ định một vị trí khác ngoài thư mục cài đặt.

Tôi gặp phải một vấn đề tương tự với AL.exe vì tôi vừa mới quét các công cụ trên máy xây dựng thay vì cài đặt SDK, vì vậy các khóa đăng ký thông thường bị thiếu. Tôi đã chạy một bản dựng với đầu ra chẩn đoán (/ verbosity: chẩn đoán) và nhận thấy rằng có một số đường dẫn công cụ SDK được xác định: Sdk40ToolsPath, Sdk35ToolsPath và SdkToolsPath. Đặt Sdk40ToolsPath để trỏ đến thư mục bin của phiên bản SDK thích hợp đã giải quyết vấn đề cho tôi.


Bạn đã đặt Sdk40ToolsPath ở đâu?
Michael Freidgeim

Tôi cho rằng nó cần được thêm vào đường dẫn môi trường. Tuy nhiên, nó không làm việc cho tôi.
Timothy Lee Russell

Xin lỗi điều này đã quá lâu rồi tôi đã quên các chi tiết, nhưng tôi nghĩ đó là một biến môi trường hoặc được đặt trong tệp dự án MSBuild. Cũng lưu ý rằng câu hỏi ban đầu liên quan đến .NET Framework 4.0 / VS2010 nhưng các biến khác nhau có thể cần thiết cho các phiên bản khung sau này.
IanS

2

Tôi đồng ý với câu trả lời của IanS. Không cần cài đặt SDK mới. Chỉ cần đảm bảo các giá trị khóa đăng ký SDK35ToolsPath và SDK40ToolPath cho MSBuild đang trỏ đến các giá trị khóa đăng ký chính xác.

Trong trường hợp của tôi, dự án của tôi đã được nhắm mục tiêu cho .NET 3.5 và tôi phải đặt SDK35ToolsPath cho khóa HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 thành $ (Đăng ký: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v6.0 WinSDKNetFxTools @ InstallerFolder). Và mọi thứ đã làm việc.


2

Chúng tôi có máy tính xây dựng winXP và sử dụng Visual Build Pro 6 để xây dựng phần mềm của chúng tôi. do một số nhà phát triển của chúng tôi sử dụng VS 2010, các tệp dự án hiện chứa tham chiếu đến "phiên bản công cụ 4.0" và từ những gì tôi có thể nói, điều này nói với Visual Build, nó cần tìm một sdk7.x ở đâu đó, mặc dù chúng tôi chỉ xây dựng cho .NET 3.5 . Điều này khiến nó không tìm thấy lc.exe. Tôi đã cố gắng đánh lừa nó bằng cách trỏ tất cả các macro vào sdk 6.0A đi kèm với VS2008 được cài đặt trên máy tính, nhưng nó không hoạt động.

Cuối cùng tôi đã làm cho nó hoạt động bằng cách tải xuống và cài đặt sdk 7.1. Sau đó, tôi đã tạo một khóa đăng ký cho 7.0A và chỉ đường dẫn cài đặt đến đường dẫn cài đặt của sdk 7.1. bây giờ nó vui vẻ tìm thấy một "lc.exe" tương thích và tất cả các mã biên dịch tốt. Tôi có cảm giác bây giờ tôi cũng sẽ có thể biên dịch mã .NET 4.0 mặc dù VS2010 chưa được cài đặt, nhưng tôi chưa thử.


2

ToolsVersion = "4.0" thực hiện điều đó cho tôi trong dự án MSBuild của tôi:

<Project DefaultTargets="Do" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Chà, trong trường hợp của tôi, tôi đã sử dụng ToolsVersion = "14.0" cho VS 2015 và điều này đã giải quyết được vấn đề
AndrewSilver

2

Trước tiên, hãy đảm bảo rằng bạn đã tải xuống dotNetFx40_Full_x86_x64.exe và đã cài đặt (Nó thường được liên kết với Visual Stdio).

Sau đó nhanh chóng đặt Biến môi trường mới tại các biến hệ thống. như dưới đây: "TargetFrameworkSDKToolsDirectory":"C:\Program Files (x86)\Microsoft SDKs\Windows\vxx.0A\bin\NETFX 4.6.1 Tools" //note:the path:'\vxx.0A\' is a variable indicating your version. it's '\v10.0A\' for me.


Đây là giải quyết vấn đề. Chỉ là một gợi ý nếu bất cứ ai có cùng một vấn đề như I. Biến Env cần được gọi là TargetFrameworkSDKToolsDirectory chứ không phải SdkToolsPath !!!
Markus

1

Tôi gặp vấn đề tương tự và đã cài đặt Windows SDK 7.0 và Windows SDK 7.1 mà không khắc phục được sự cố. Nguyên nhân của vấn đề đối với tôi là thư viện lớp vi phạm được xây dựng với Target Framework của .NET Framework 2.0.

Tôi đã thay đổi nó thành .NET Framework 4.0 và hoạt động cục bộ và khi được kiểm tra trong máy chủ Build đã xây dựng thành công.


1

Tôi đã có một vấn đề tương tự, đáng chú ý msbuild bị lỗi: không tìm thấy MSB3086, MSB3091: "AL.exe", "resgen.exe"

Trên máy Windows 7 64 bit, tôi đã cài đặt .Net framework 4.5.1 và Windows SDK cho Windows 8.1.

Mặc dù các thiết lập cho SDK nói rằng nó đã được cập nhật, nhưng có lẽ là không. Tôi đã giải quyết vấn đề bằng cách xóa tất cả các phiên bản SDK đã cài đặt, sau đó cài đặt các phần sau, theo thứ tự sau:

http://www.microsoft.com/en-us/doad/details.aspx?id=3138

http://www.microsoft.com/en-us/doad/details.aspx?id=8279

http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx

http://msdn.microsoft.com/en-us/windows/desktop/aa904949.aspx


1

Câu trả lời ngắn: Trong tệp .csproj, có một cách để chỉ định đường dẫn đến sgen.exe, sử dụng SGenToolPath:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <SGenToolPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools</SGenToolPath>
  </PropertyGroup>

Con đường của bạn có thể khác, nhưng SGenToolPath là những gì bạn muốn.

Để biết danh sách các thuộc tính Dự án MSBuild phổ biến khác, hãy xem: https://msdn.microsoft.com/en-us/l Library / bb629394.aspx

Chúng tôi đã kết thúc bằng cách sử dụng cài đặt SGenToolPath này trong tệp .csproj, thay vì chỉnh sửa các giá trị đăng ký trên máy chủ bản dựng. Chỉnh sửa các giá trị đăng ký trên máy cục bộ của tôi cũng đã hoạt động, nhưng phức tạp hơn một chút và chúng tôi không muốn làm hỏng sổ đăng ký trên máy chủ bản dựng.

Đối với sổ đăng ký: Trong trường hợp đó, vấn đề là SDK40ToolsPath trong HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild đã trỏ đến giá trị đăng ký $ (Đăng ký: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86 @ InstallerFolder) không tồn tại. Tôi chỉ thay thế bằng con đường thực tế trực tiếp.


1

Tôi cũng gặp phải vấn đề này khi cố gắng xây dựng một plugin bằng Visual Studio 2017 trên máy tính tại nơi làm việc lộn xộn khủng khiếp của tôi. Nếu bạn tìm kiếm trên internet vì "không thể tìm thấy resgen.exe", bạn có thể tìm thấy tất cả lời khuyên này giống như ' chỉ cần sử dụng regedit để chỉnh sửa Windows Registry của bạn và tạo một khóa mới tại đây và sao chép và dán nội dung của thư mục này vào thư mục khác này, blah blah blah. '

Tôi đã mất hàng tuần chỉ để làm rối Windows Registry của mình bằng regedit, có lẽ đã thêm một tá khóa phụ và ResGen.exe đã sao chép vào nhiều thư mục khác nhau, đôi khi đặt nó vào thư mục 'bin', đôi khi chỉ giữ nó trong thư mục chính, Vân vân.

Cuối cùng, tôi nhận ra: "Này, nếu Visual Studio đưa ra thông báo lỗi chi tiết hơn, thì đây không phải là vấn đề." Vì vậy, để biết thêm chi tiết về lỗi, tôi đã chạy MSBuild.exe trực tiếp trên tệp * .csproj của tôi từ dòng lệnh:

 "C:/Windows/Microsoft.NET/Framework/v4.0.3.0319/MSBuild.exe C:/Users/Todd/Plugin.csproj -fl -flp:logfile="C:/Users/Todd/Desktop/error_log.log";verbosity=diagnostic"

Tất nhiên, bạn sẽ phải thay đổi chi tiết đường dẫn để phù hợp với tình huống của mình, nhưng hãy chắc chắn đặt 1) đường dẫn hoàn chỉnh tới MSBuild.exe 2) đường dẫn đầy đủ đến tệp * .csproj 3) -fl -flp: logfile = part, sẽ cho MSBuild tạo một tệp nhật ký của từng bước trong quy trình, 4) vị trí bạn muốn tệp * .log được lưu và 5); verbosity = chẩn đoán, về cơ bản chỉ nói với MSBuild để bao gồm TẤN chi tiết trong tệp * .log.

Sau khi bạn thực hiện việc này, quá trình xây dựng sẽ thất bại như mọi khi, nhưng bạn sẽ bị bỏ lại một tệp * .log hiển thị chính xác nơi MSBuild tìm tệp ResGen.exe của bạn. Trong trường hợp của tôi, gần cuối tệp * .log, tôi đã tìm thấy:

Compiling plug-in resources (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.2\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.1\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.1a\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0a\WinSDK-NetFx40Tools-x86 (Task ID:41)
MSBUILD: error : Failed to locate ResGen.exe and unable to compile plug-in resource file "C:/Users/Todd/PluginResources.resx"

Về cơ bản, MSBuild đã xem xét năm thư mục riêng biệt cho ResGen.exe, sau đó từ bỏ. Đây là loại chi tiết bạn không thể nhận được từ thông báo lỗi của Visual Studio và nó giải quyết được vấn đề: chỉ cần sử dụng regedit để tạo khóa cho bất kỳ một trong năm vị trí đó và đặt giá trị "InstallerFolder" vào khóa , sẽ trỏ đến thư mục chứa ResGen.exe của bạn (trong trường hợp của tôi là "C: \ Program Files \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.2 Tools").

Nếu bạn là một chuyên gia nhân văn như tôi không có nền tảng về máy tính, bạn có thể chỉ muốn chỉnh sửa cái hốc ra khỏi Windows Registry của mình và sao chép-dán ResGen.exe ở mọi nơi khi gặp phải lỗi như thế này (đó là tất nhiên, thực hành xấu). Tốt hơn là làm theo quy trình được nêu ở trên: 1) Chạy MSBuild.exe trực tiếp trên tệp * .csproj của bạn để tìm ra vị trí chính xác MSBuild đang tìm ResGen.exe sau đó 2) chỉnh sửa Windows Registry của bạn một cách chính xác để MSBuild có thể tìm thấy ResGen. exe


Tôi đã thử điều này nhưng vì một số lý do tôi không nhận được danh sách các đường dẫn mà bạn hiển thị. Tôi đã tìm thấy một bài đăng tương tự như của bạn trên trang web này: Community.sdl.com/developers-more/developers/NH vì vậy tôi biết rằng nó nên hoạt động, nhưng không có kết quả. Phiên bản MSBuild nào bạn đang sử dụng?
dùng11809641

Hình như tôi đang sử dụng MSBuild phiên bản 4.0.30319. Tôi cũng đã cài đặt phiên bản 3.5, 3.0 và 2.0.50727 trên máy tính này. Tôi đã cố chạy các phiên bản MSBuild đó trên tệp * .csproj của mình (theo cùng một cách như đã nêu ở trên), nhưng nó không hoạt động ... thậm chí còn không tạo tệp * .log. /// Khi bạn chạy MSBuild trên tệp * .csproj của mình, máy tính ít nhất có tạo ra tệp * log không? Tôi hiểu rằng có một tệp nhật ký, chỉ là không có thông tin cụ thể nào liên quan đến các đường dẫn đã được tìm kiếm khi tìm kiếm ResGen.exe - điều đó có đúng không?
todbott

Hình như tôi có cùng phiên bản MSBuild (4.0.30319). Và vâng, bạn đúng. Tôi đang nhận được một tệp nhật ký, nhưng nó không cung cấp bất kỳ thông tin nào về đường dẫn Registry. Mà trong số năm con đường bạn đăng ở trên bạn đã kết thúc bằng cách sử dụng?
dùng11809641

Tôi đã sử dụng đường dẫn thứ 1 trong danh sách - chỉ cần thêm "InstallerFolder" trong PHẦN MỀM chính \ WOW6432Node \ Microsoft \ Microsoft SDKs \ NETFXSDK \ 4.6.2 \ WinSDK-NetFx40Tools-x86. Ngoài ra, tệp * .log thực sự rất dài - hàng nghìn dòng, trong trường hợp của tôi. Tôi không thể tìm thấy thông tin đường dẫn bằng mắt thường. Cuối cùng tôi đã mở tệp * .log trong Notepad và tìm kiếm "ResGen.exe", điều này khiến tôi chú ý đến khu vực thích hợp (thông tin đường dẫn).
todbott

1
Siêu - xin chúc mừng! Bạn đã trở thành một trong số ít người (vài trăm người, tôi đoán vậy), người đã chiến đấu với các lỗi và bí ẩn và thực sự đã biên dịch thành công một plugin cho Trados. Chúc may mắn với việc xuất bản plugin của bạn, hẹn gặp bạn trên SDL Appstore!
todbott

1

Tôi đã sửa nó bằng cách chuyển cái này dưới dạng tham số dòng lệnh cho msbuild.exe:

Số dặm của bạn sẽ thay đổi tùy thuộc vào phiên bản SDK bạn có trên hệ thống của mình

/p:TargetFrameworkSDKToolsDirectory="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

0

Bên cạnh các mod đăng ký, bạn có thể cần thay đổi phiên bản .net sdk cài đặt của bạn được đặt thành trong Visual Studio.

Tôi đã gặp vấn đề này và quyết định kiểm tra cài đặt gỡ lỗi dự án.

Dự án => Thuộc tính thanh công cụ => Nút Tùy chọn biên dịch gỡ lỗi

Khung mục tiêu (tất cả các cấu hình) được đặt thành 3.0 không có trên hệ thống của tôi.

Tôi đã thay đổi điều đó thành 4.0, sau đó phải khởi động lại dự án và Visual Studio 2010.

Dự án sau đó được xây dựng không có lỗi và chạy.


Tôi đã phạm một lỗi ở vị trí sau. Dự án => Thuộc tính thanh công cụ => Nút Tùy chọn biên dịch nâng cao Tôi cũng đã tạo một dự án mới và dự án mới .net được đặt thành 3.0. Vì vậy, sẽ cần phải thay đổi cài đặt mặc định. Scott A. Tovey
Scott Tovey

Tôi phát hiện ra rằng khi bạn tạo một dự án, ở đầu cửa sổ có một danh sách thả xuống của tất cả các khung. Tất cả mọi thứ được liệt kê bất kể nó được cài đặt hay không. Khi bạn chọn một khung công tác và tạo một dự án từ danh sách đó, nó vẫn là mặc định cho đến khi bạn thay đổi nó sang một khung công tác khác cho một dự án mới. Điều này là một chút liều lĩnh, danh sách chỉ nên chứa các khung được cài đặt trên hệ thống.
Scott Tovey

0

Tôi đã có một vấn đề tương tự. Tôi đã thực hiện một dự án bằng cách sử dụng Visual Studio 2010và sau đó đã nhận được lỗi ở trên khi tôi biên dịch nó bằng cách sử dụng Visual Studio 2012. Tôi đơn giản sao chép tất cả nội dung C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0Avào C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0Avà điều đó đã giải quyết vấn đề của tôi.


3
Tôi muốn có một cuộc bỏ phiếu cho giải pháp tồi tệ nhất thế giới. Đây sẽ là nó.
jonypony3

0

Tôi vừa gặp lỗi này với tệp .sln ban đầu được tạo trong Visual Studio 2010 (và được xây dựng bởi Visual Studio 2010 và TFS 2010). Tôi đã sửa đổi tệp giải pháp thành KHÔNG xây dựng dự án mà lẽ ra không được xây dựng trong một cấu hình cụ thể và phòng thu trực quan đã thay đổi tiêu đề của tệp giải pháp từ:

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010

Đến:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1

Đặt nó trở lại phiên bản 2010 gốc đã khắc phục sự cố của tôi. Tôi đoán khả năng tương thích ngược trong Visual Studio vẫn chưa được hoàn thiện.


0

hãy thử sử dụng "sửa chữa" của studio trực quan. Nó làm việc cho tôi.


0

Bao bọc CMD
Tôi đã thử tất cả những thứ từ đây và thậm chí nhiều hơn. Không có gì giúp tôi.

Tôi đã áp dụng một trình bao bọc CMD cho MSBuild và DevEnv.com.
Ý tưởng chính bên trong một trình bao bọc như vậy là tạo ra một môi trường chuẩn bị bằng cách gọi Command Prompts từ nguồn cung cấp Visual Studio. Và sau đó chuyển các tham số đầu vào tiêu chuẩn cho một cuộc gọi của MSBuild hoặc DevEnv.com.

Dù sao, trên máy chủ xây dựng của tôi bây giờ tôi có thể xây dựng các dự án từ các phiên bản Visual Studio khác nhau.

Cách sử dụng
Tôi phải thay thế các cuộc gọi đến MSBuild và DevEnv bằng một cuộc gọi đến trình bao bọc tệp bó của tôi.
Và tôi đã không thay đổi bất kỳ tham số đầu vào. Để làm ví dụ cho lệnh gọi trình bao bọc MSBuild của tôi:

MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release

Giải pháp sẵn sàng
Trên thực tế, tôi gặp nhiều rắc rối hơn với việc di chuyển từ VS 2010 sang VS 2015. Nhưng đây là lần đầu tiên và khó khăn nhất.
Vì vậy, công thức cứu hộ khiêm tốn của tôi cho Build Server là ở đây. Có thể rất khó để hiểu tất cả phong cách CMD này ngay từ giây phút đầu tiên nhưng bất kỳ logic nào là rõ ràng, tôi hy vọng.

Gợi ý

MSBuild Command Prompt for Visual StudioDeveloper Command Prompt for Visual Studio
tôi sử dụng chúng một cách thích hợp cho MSBuild và DevEnv.com. Nhưng có lẽ Dấu nhắc lệnh MSBuild sẽ là đủ.

Đối với VS 2015, các dấu nhắc lệnh này có ở đây C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\ . Hoặc xem qua menu chương trình Windows.

Để chuyển tất cả các tham số đầu vào cho MSBuild hoặc DevEnv trong một tệp bó tôi đã sử dụng CALL MSBuild %*

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.