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