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?
fuslogvw.exe
như một quản trị viên để tránh mọi vấn đề về quyền.
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?
fuslogvw.exe
như một quản trị viên để tránh mọi vấn đề về quyền.
Câu trả lời:
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.
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à:
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.)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.)
fuslogvw
khô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à ...)
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".
Đặ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ể.
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
c:\FusionLog
thư mục để mọi người đừng quên điều đó ;-)
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.
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-C01A46FAF4CA
và FusionKeyword
từ 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:
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ó.
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:
Tạo một nhóm ứng dụng mới
Chuyển đến Cài đặt nâng cao của nhóm ứng dụng này
Đặt ứng dụng Bật 32 bit thành True
Trỏ ứng dụng web của bạn để sử dụng nhóm mới này
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ư:
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ũ.
Đố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
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