Làm cách nào để kích hoạt tính năng ghi nhật ký liên kết lắp ráp (Fusion) trong .NET


818

Làm cách nào để kích hoạt tính năng ghi nhật ký liên kết lắp ráp (Fusion) trong .NET?


46
Nếu bất cứ ai quan tâm, để sử dụng fusion logger (fuslogvw.exe) hãy đọc bài viết này: msdn.microsoft.com/en-us/l Library / e74a18c4 (v = VS.100) .aspx nó sẽ cho bạn biết nơi tải xuống và thông tin khác.

13
@ Sẽ - cảm ơn vì đã chia sẻ! Là một phần thưởng - đảm bảo bạn chạy fuslogvw.exenhư một quản trị viên để tránh mọi vấn đề về quyền.
SliverNinja - MSFT

13
@ Tôi sẽ không đồng ý rằng cài đặt fuslogvw là câu trả lời "tốt nhất". Nếu bạn chỉ có thể nhận được công cụ mà không phải cài đặt toàn bộ SDK Windows cho những gì có khả năng không phải là môi trường phát triển thì bạn sẽ có một điểm.
Coxy

2
@ Sẽ chắc chắn, nhưng câu trả lời bạn liên kết đến không bao gồm bất kỳ điều đó.
Coxy

8
@ Sẽ không quá trẻ con về điều đó. Bạn là người cố gắng thu thập đại diện bằng cách quảng cáo một câu trả lời rằng, trong khi hữu ích, cộng đồng đã đánh giá ít hữu ích hơn những người khác, một điều dễ dàng hơn nhiều và một điều khác thực tế giống nhau.
Coxy

Câu trả lời:


868

Thêm các giá trị sau vào

HKEY_LOCAL_MACHINE \ PHẦN MỀM \ Microsoft \ Fusion
Thêm vào:
Giá trị cài đặt DWORD ForceLog thành 1
DWORD LogFailures đặt giá trị thành 1
DWORD LogResourceBinds đặt giá trị thành 1
DWORD EnableLog đặt giá trị thành 1
Chuỗi LogPath đặt giá trị thành thư mục cho các bản ghi (ví dụ: C: \ FusionLog \)

Đảm bảo bạn bao gồm dấu gạch chéo ngược sau tên thư mục và Thư mục tồn tại .

Bạn cần khởi động lại chương trình mà bạn đang chạy để buộc chương trình đó đọc các cài đặt đăng ký đó.

Nhân tiện, đừng quên tắt ghi nhật ký nhiệt hạch khi không cần thiết.

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


23
Các giải pháp của Gary đã làm việc cho tôi mặc dù tôi cũng phải tuân theo bằng cách đặt lại IIS. Lưu ý Tôi đã định cấu hình này trong môi trường sạch, nơi tôi không muốn cài đặt SDK và những thứ tương tự.
Michhes

5
Được báo cáo bởi một số thay đổi đăng ký không mất ngay lập tức. Bạn đã thử bật đăng nhập Fusion sau đó khởi động lại chưa?
Gary Kindel

54
Bạn cần khởi động lại bất cứ chương trình nào mà bạn đang chạy để đọc các cài đặt đăng ký đó
Orion Edwards

50
Fusion Log Viewer làm tất cả điều đó cho bạn. Đi đến Bắt đầu -> Chương trình -> Visual Studio xxxx> Visual Studio Tools> Visual Studio Command Prompt (chạy với tư cách quản trị viên) và nhập "fuslogvw". Trong Cài đặt, bạn điều chỉnh việc đăng nhập.
r3mark

10
Để bật / tắt ghi nhật ký tiện dụng, tôi đã tạo các tệp .reg, dựa trên câu trả lời của Gary Kindel: bậttắt .
Igor Kustov

271

Tôi thường sử dụng Trình xem nhật ký Fusion ( Fuslogvw.exe từ dấu nhắc lệnh của Visual Studio hoặc Trình xem nhật ký Fusion từ menu bắt đầu) - thiết lập tiêu chuẩn của tôi là:

  • Mở Fusion Log Viewer với tư cách quản trị viên
  • Nhấp vào cài đặt
  • Chọn hộp kiểm Bật đường dẫn nhật ký tùy chỉnh
  • Ví dụ, nhập vị trí bạn muốn ghi nhật ký c:\FusionLogs( Quan trọng: đảm bảo rằng bạn đã thực sự tạo thư mục này trong hệ thống tệp.)
  • Đảm bảo rằng mức ghi nhật ký phù hợp được bật (đôi khi tôi chỉ chọn Ghi nhật ký tất cả các liên kết vào đĩa chỉ để đảm bảo mọi thứ hoạt động tốt)
  • Nhấn vào OK
  • Đặt tùy chọn vị trí nhật ký thành Tùy chỉnh

Hãy nhớ tắt đăng nhập sau khi bạn hoàn tất!

(Tôi vừa đăng bài này lên một câu hỏi tương tự - Tôi nghĩ nó cũng có liên quan ở đây.)


4
Lưu ý rằng trong trường hợp bạn tự lưu trữ thời gian chạy từ ứng dụng gốc, bạn sẽ được yêu cầu sử dụng đường dẫn nhật ký tùy chỉnh vì một số lý do nếu không bạn sẽ không nhận được bất cứ điều gì được ghi lại.
jpierson

Ít nhất trong tình huống của tôi, tôi thực sự không phải thiết lập các đường dẫn nhật ký tùy chỉnh. Tất cả những gì tôi phải làm là bật đăng nhập, ví dụ: "Đăng nhập tất cả các liên kết vào đĩa" trên hộp thoại cài đặt.
Josh

42
Chạy với tư cách Quản trị viên là bắt buộc trong trường hợp của tôi, nếu không tất cả các tùy chọn đã bị tắt.
vezenkov

2
Lưu ý: tạo thư mục là Admin!
Tabrock

6
Hãy chắc chắn rằng bạn đang chạy fuslogvwkhông chỉ với tư cách quản trị viên mà còn từ đường dẫn SDK Windows chính xác mà dự án Visual Studio ném ngoại lệ đang sử dụng. Kiểm tra csproj của nó và tìm kiếm SDK trong (nút sdk của tôi được đặt tên TargetFrameworkSDKToolsDirectory). Sử dụng phiên bản fuslogvw không phù hợp dường như không bắt được các ngoại lệ (có nghĩa là ...)
Veverke

191

Nếu bạn đã cài đặt Windows SDK trên máy của mình, bạn sẽ tìm thấy "Trình xem nhật ký kết hợp" trong Microsoft SDK \ Tools (chỉ cần nhập "Fusion" trong menu bắt đầu trên Vista hoặc Windows 7/8). Khởi chạy nó, nhấp vào nút Cài đặt và chọn "Nhật ký liên kết thất bại" hoặc "Đăng nhập tất cả các liên kết".

Nếu các nút này bị vô hiệu hóa, hãy quay lại menu bắt đầu, nhấp chuột phải vào Trình xem nhật ký và chọn "Chạy với tư cách quản trị viên".


6
Những nút đó bị vô hiệu hóa đối với tôi - tại sao?
Tim Lovell-Smith

14
@Tim, không thấy điều đó trước đây - nó có thể được thực hiện với các đặc quyền của Quản trị viên không? Đó là HKEY_LOCAL_MACHINE đang được sửa đổi.
Samuel Jack

2
"Cài đặt, thất bại liên kết đăng nhập" là đủ để tìm ra vấn đề của tôi.
pauloya

1
Hãy chắc chắn rằng thư mục cho phép truy cập ghi. Nhật ký UAC và c: \ không chơi tốt với nhật ký hợp nhất
Edward Wilde

4
Cũng như một lưu ý, nếu các nút bị vô hiệu hóa, hãy chạy lại trình xem nhật ký hợp nhất với quyền quản trị viên.
Bruno Lopes

86

Đặt giá trị đăng ký sau:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) thành 1

Để tắt, đặt thành 0 hoặc xóa giá trị.

[sửa]: Lưu văn bản sau vào một tệp, ví dụ FusionEnableLog.reg, trong Định dạng Windows Registry Editor:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001

Sau đó chạy tệp từ windows explorer và bỏ qua cảnh báo về thiệt hại có thể.


4
Không phải là mục có thể sẽ không tồn tại - bạn sẽ phải tạo nó. Ít nhất, tôi đã làm khi tôi chuẩn bị trả lời câu hỏi này ngay trước khi vụ tai nạn sáng nay :)
Jon Skeet

3
Làm gì nghĩa là? Chìa khóa hay giá trị? Hệ thống 64 bit thì sao?
Bruno Martinez

48
Trên thực tế, điều này không hoạt động ... bạn chỉ cần chạy iisreset afterwords để làm cho nó hoạt động.
Nick DeMayo

4
@Norman: Bởi vì cài đặt cụ thể này được sử dụng để làm cho các lỗi Asp.Net hiển thị các thông báo lỗi liên kết lắp ráp trong các trang lỗi, không lưu nhật ký vào tệp. @OP: +1. Đã chỉnh sửa để bao gồm tệp .reg. Các ! định dạng là cái tôi chưa từng thấy, ngoại trừ trong thông báo lỗi đã gửi tôi đến trang này để tìm câu trả lời.
Brian

2
Bạn không cần thiết lập lại IIS - chỉ nhóm ứng dụng có liên quan. Hoặc ít nhất đó là tất cả những gì tôi cần làm.
Kenny Evitt

81

Bạn có thể chạy tập lệnh Powershell này với tư cách quản trị viên để bật FL:

Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog         -Value 1               -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures      -Value 1               -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds -Value 1               -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath          -Value 'C:\FusionLog\' -Type String
mkdir C:\FusionLog -Force

và cái này để vô hiệu hóa:

Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath

4
Cảm ơn! Tôi đã cho phép mình đặt lệnh của bạn vào ý chính này . Và tôi đã thêm việc tạo c:\FusionLogthư mục để mọi người đừng quên điều đó ;-)
Oliver

Quy tắc dòng lệnh! Tôi có thể nhanh chóng phát lại điều này bằng cách sử dụng công nghệ tái sử dụng mã được phát minh tốt nhất cho đến nay gọi là "cắt và dán". Cảm ơn.
Remigijus Pankevičius

20

Các thay đổi cuộc kịch bản Fusion Log Settings Viewer là thanh none cách tốt nhất để làm điều này.

Trong ASP.NET , đôi khi thật khó để làm cho nó hoạt động chính xác. Kịch bản này hoạt động rất tốt và cũng được liệt kê trong danh sách Power Tool của Scott Hanselman . Cá nhân tôi đã sử dụng nó trong nhiều năm và nó không bao giờ làm tôi thất vọng.


ps MAKE SURE bạn vô hiệu hóa nó sau khi chạy hoặc thư mục này có thể trở nên khá lớn
Adam Tuliper - MSFT

đây là lý do tại sao tôi sử dụng ETW, để chỉ đăng nhập dữ liệu nếu tôi thực sự cần chúng, không phải lúc nào cũng trong một tệp nhật ký lớn xấu xí.
magicandre1981

13

Thay vì sử dụng tệp nhật ký xấu, bạn cũng có thể kích hoạt nhật ký Fusion qua ETW / xperf bằng cách bật nhà cung cấp DotnetR.78 Private ( Microsoft-Windows-DotNETRuntimePrivate) với GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CAFusionKeywordtừ khóa (0x4).

@echo off
echo Press a key when ready to start...
pause
echo .
echo ...Capturing...
echo .

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -on PROC_THREAD+LOADER+PROFILE -stackwalk Profile -buffersize 1024 -MaxFile 2048 -FileMode Circular -f Kernel.etl
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+763FD754-7086-4DFE-95EB-C01A46FAF4CA:0x4:0x5 -f clr.etl -buffersize 1024

echo Press a key when you want to stop...
pause
pause
echo .
echo ...Stopping...
echo .

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrRundownSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+Microsoft-Windows-DotNETRuntimeRundown:0x118:0x5:'stack' -f clr_DCend.etl -buffersize 1024 

timeout /t 15

set XPERF_CreateNGenPdbs=1

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop ClrSession ClrRundownSession 
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -merge kernel.etl clr.etl clr_DCend.etl Result.etl -compress
del kernel.etl
del clr.etl
del clr_DCend.etl

Khi bạn mở tệp ETL trong PerfView và xem trong bảng Sự kiện, bạn có thể tìm thấy dữ liệu Fusion:

Sự kiện kết hợp trong PerfView


@YuriBondarchuk này kích hoạt nó theo yêu cầu và bạn có nhiều dữ liệu trong ETL (quá trình khác, FileVersion dữ liệu) để bạn có thể cung cấp cho các tập tin t những người dùng khác và họ có thể nhận được nhiều thông tin hơn so với các bản ghi fusion bình thường
magicandre1981

12

Tôi đã viết một trình xem nhật ký liên kết lắp ráp có tên Fusion ++ và đưa nó lên GitHub .

Bạn có thể nhận được bản phát hành mới nhất từ đây hoặc thông qua chocolatey ( choco install fusionplusplus).

Tôi hy vọng bạn và một số khách truy cập ở đây có thể tiết kiệm một số phút đáng giá trọn đời với nó.

Hợp nhất ++


1
Thưa ông, ông là một vị thần!
Sylvain Girard

1
Đó là một công cụ tuyệt vời, cảm ơn bạn rất nhiều!
simoneL

3

Nếu bạn đã kích hoạt đăng nhập và bạn vẫn gặp lỗi này trên Windows 7 64 bit, hãy thử điều này trong IIS 7.5:

  1. Tạo một nhóm ứng dụng mới

  2. Chuyển đến Cài đặt nâng cao của nhóm ứng dụng này

  3. Đặt ứng dụng Bật 32 bit thành True

  4. Trỏ ứng dụng web của bạn để sử dụng nhóm mới này


bạn ơi, bạn tiết kiệm trong ngày của tôi, tôi mất khoảng 8 giờ để giải quyết vấn đề. cảm ơn nhiều. :)
Dika Arta Karunia

3

Chỉ cần một chút thông tin có thể giúp đỡ người khác; nếu bạn thực hiện một số thao tác tìm kiếm tất cả các tập hợp trong một số thư mục cho các lớp kế thừa / thực hiện các lớp / giao diện, thì hãy đảm bảo bạn xóa sạch các tập hợp cũ nếu bạn gặp lỗi này liên quan đến một trong các tập hợp của riêng bạn.

Kịch bản sẽ giống như:

  1. Hội A tải tất cả các cụm trong một số thư mục
  2. Hội B trong thư mục này đã cũ, nhưng tham chiếu lắp ráp C
  3. Hội C tồn tại, nhưng không gian tên, tên lớp hoặc một số chi tiết khác có thể đã thay đổi trong thời gian trôi qua kể từ khi hội đồng B trở nên cũ kỹ (trong trường hợp của tôi, một không gian tên đã được thay đổi thông qua quy trình tái cấu trúc)

Tóm lại: A --- tải -> B (cũ) --- tài liệu tham khảo ---> C

Nếu điều này xảy ra, dấu hiệu nhận biết duy nhất là không gian tên và tên lớp trong thông báo lỗi. Kiểm tra nó chặt chẽ. Nếu bạn không thể tìm thấy nó ở bất cứ đâu trong giải pháp của mình, có khả năng bạn đang cố gắng tải một cụm lắp ráp cũ.


3

Đối với những người hơi lười biếng, tôi khuyên bạn nên chạy tệp này dưới dạng tệp dơi cho đến khi nào bạn muốn kích hoạt nó:

reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogFailures /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogResourceBinds /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogPath /t REG_SZ /d C:\FusionLog\

if not exist "C:\FusionLog\" mkdir C:\FusionLog

1

Chỉ trong trường hợp bạn đang tự hỏi về vị trí của FusionLog.exe - Bạn biết bạn có nó, nhưng bạn không thể tìm thấy nó? Tôi đã tìm kiếm FUSLOVW trong vài năm qua nhiều lần. Sau khi chuyển sang .NET 4.5, phiên bản FUSION LOG đã phát nổ. Đây là nơi có thể tìm thấy trên đĩa của bạn, tùy thuộc vào phần mềm bạn đã cài đặt:

C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Công cụ \ x64

C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64

C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Công cụ \ x64

C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Công cụ

C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Công cụ

C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin


0

Trong trường hợp của tôi đã giúp gõ tên đĩa trong trường hợp thấp hơn

Sai - C: \ someFolder

Đúng - c: \ someFolder

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.