ฉันจะเปิดใช้งานการบันทึกการเชื่อมต่อล้มเหลวของชุดประกอบ (ฟิวชั่น) ใน. NET ได้อย่างไร
fuslogvw.exe
ในฐานะผู้ดูแลระบบเพื่อหลีกเลี่ยงปัญหาสิทธิ์ใด ๆ
ฉันจะเปิดใช้งานการบันทึกการเชื่อมต่อล้มเหลวของชุดประกอบ (ฟิวชั่น) ใน. NET ได้อย่างไร
fuslogvw.exe
ในฐานะผู้ดูแลระบบเพื่อหลีกเลี่ยงปัญหาสิทธิ์ใด ๆ
คำตอบ:
เพิ่มค่าต่อไปนี้ลงใน
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ ฟิวชั่น เพิ่ม: DWORD ForceLog ตั้งค่าเป็น 1 DWORD LogFailures ตั้งค่าเป็น 1 DWORD LogResourceBinds ตั้งค่าเป็น 1 DWORD EnableLog ตั้งค่าเป็น 1 String LogPath ตั้งค่าเป็นโฟลเดอร์สำหรับบันทึก (เช่น C: \ FusionLog \)
ให้แน่ใจว่าคุณรวมถึงเครื่องหมายหลังชื่อโฟลเดอร์และว่าโฟลเดอร์ที่มีอยู่
คุณต้องรีสตาร์ทโปรแกรมที่คุณใช้เพื่อบังคับให้อ่านการตั้งค่ารีจิสทรีเหล่านั้น
อย่าลืมปิดการบันทึกการฟิวชั่นเมื่อไม่ต้องการ
ฉันมักจะใช้ Fusion Log Viewer ( Fuslogvw.exeจากพรอมต์คำสั่ง Visual Studioหรือ Fusion Log Viewer จากเมนูเริ่ม) - การตั้งค่ามาตรฐานของฉันคือ:
c:\FusionLogs
( สำคัญ:ตรวจสอบให้แน่ใจว่าคุณได้สร้างโฟลเดอร์นี้ในระบบไฟล์แล้ว)อย่าลืมออกจากระบบเมื่อคุณทำเสร็จแล้ว!
(ฉันเพิ่งโพสต์นี้ในคำถามที่คล้ายกัน - ฉันคิดว่ามันเกี่ยวข้องกับที่นี่ด้วย)
fuslogvw
ไม่เพียง แต่เป็นผู้ดูแลระบบ แต่ยังมาจากเส้นทาง Windows SDK ที่ถูกต้องโครงการ Visual Studio ที่กำลังดำเนินการอยู่ ตรวจสอบ csproj และค้นหา SDK ภายใน (ชื่อโหนด sdk ของฉันTargetFrameworkSDKToolsDirectory
) การใช้รุ่นที่ไม่ตรงกัน fuslogvw ดูเหมือนจะไม่จับข้อยกเว้น (ซึ่งเหมาะสม ... )
หากคุณติดตั้ง Windows SDK ไว้ในเครื่องของคุณคุณจะพบ "Fusion Log Viewer" ภายใต้ Microsoft SDK \ Tools (เพียงพิมพ์ "Fusion" ในเมนูเริ่มบน Vista หรือ Windows 7/8) เปิดใช้งานคลิกปุ่มการตั้งค่าและเลือก "Log bind failure" หรือ "Log all binds"
หากปุ่มเหล่านี้ถูกปิดใช้งานให้กลับไปที่เมนูเริ่มต้นคลิกขวาที่ Log Viewer และเลือก "Run as Administrator"
ตั้งค่ารีจิสทรีต่อไปนี้:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) ถึง 1
หากต้องการปิดใช้งานให้ตั้งค่าเป็น 0 หรือลบค่า
[แก้ไข]: บันทึกข้อความต่อไปนี้ไปยังไฟล์เช่น FusionEnableLog.reg ในรูปแบบ Windows Registry Editor:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
จากนั้นเรียกใช้ไฟล์จาก windows explorer และละเว้นคำเตือนเกี่ยวกับความเสียหายที่อาจเกิดขึ้น
คุณสามารถเรียกใช้สคริปต์ Powershell นี้ในฐานะผู้ดูแลระบบเพื่อเปิดใช้งาน 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
และหนึ่งนี้เพื่อปิดการใช้งาน:
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
dir เพื่อให้คนที่ไม่ลืมว่า ;-)
สคริปต์เปลี่ยนฟิวชั่นเข้าสู่การตั้งค่าแสดงเป็นแถบไม่มีวิธีที่ดีที่สุดที่จะทำนี้
ในASP.NETมันมีความยุ่งยากในบางครั้งที่จะทำให้มันทำงานได้อย่างถูกต้อง สคริปต์นี้ใช้งานได้ดีและได้รับการจดทะเบียนในรายการPower Tool ของ Scott Hanselmanเช่นกัน ฉันใช้มันเป็นการส่วนตัวมาหลายปีแล้วและมันก็ไม่ทำให้ฉันผิดหวัง
แทนที่จะใช้ไฟล์บันทึกที่น่าเกลียดคุณสามารถเปิดใช้งาน Fusion log ผ่านETW / xperf ได้โดยเปิดผู้ให้บริการส่วนตัวของ DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate
) ด้วย GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
และFusionKeyword
คีย์เวิร์ด (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
เมื่อคุณเปิดไฟล์ ETL ในPerfViewและดูใต้ตารางกิจกรรมคุณสามารถค้นหาข้อมูล Fusion ได้:
ผมเขียนโปรแกรมดูบันทึกผูกพันประกอบชื่อฟิวชั่น ++ และวางไว้บน GitHub
คุณสามารถรับรุ่นล่าสุดได้จากที่นี่หรือทาง chocolatey ( choco install fusionplusplus
)
ฉันหวังว่าคุณและผู้เยี่ยมชมบางส่วนในที่นี้จะสามารถช่วยชีวิตนาทีที่คุ้มค่าไว้ได้
หากคุณได้เปิดใช้งานการบันทึกแล้วและคุณยังคงได้รับข้อผิดพลาดนี้ใน Windows 7 64 บิตให้ลองใน IIS 7.5:
สร้างกลุ่มแอปพลิเคชันใหม่
ไปที่การตั้งค่าขั้นสูงของแอพพลิเคชั่นนี้
ตั้งค่าเปิดใช้แอปพลิเคชั่น 32 บิตเป็นTrue
ชี้แอปพลิเคชันเว็บของคุณเพื่อใช้กลุ่มใหม่นี้
เพียงข้อมูลเล็กน้อยที่อาจช่วยผู้อื่น ถ้าคุณทำบางอย่างตามบรรทัดของการค้นหาแอสเซมบลีทั้งหมดในบางไดเรกทอรีสำหรับคลาสที่สืบทอด / ใช้คลาส / อินเทอร์เฟซให้แน่ใจว่าคุณล้างแอสเซมบลีเก่าถ้าคุณได้รับข้อผิดพลาดนี้เกี่ยวข้องกับแอสเซมบลีของคุณ
สถานการณ์จะเป็นดังนี้:
ในระยะสั้น: A --- โหลด -> B (เก่า) --- อ้างอิง ---> C
หากสิ่งนี้เกิดขึ้นสัญญาณปากโป้งเพียงอย่างเดียวคือเนมสเปซและคลาสในข้อความแสดงข้อผิดพลาด ตรวจสอบอย่างใกล้ชิด หากคุณไม่พบที่ใดก็ได้ในโซลูชันของคุณคุณอาจลองโหลดชุดประกอบเก่า
สำหรับผู้ที่ขี้เกียจนิดหน่อยผมแนะนำให้เรียกใช้ไฟล์นี้เป็นไฟล์ bat เมื่อคุณต้องการเปิดใช้งาน:
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
ในกรณีที่คุณสงสัยเกี่ยวกับตำแหน่งของ FusionLog.exe - คุณรู้ว่าคุณมี แต่คุณหามันไม่เจอ? ฉันกำลังมองหา FUSLOVW ในไม่กี่ปีที่ผ่านมาครั้งแล้วครั้งเล่า หลังจากย้ายไปยัง. NET 4.5 จำนวนเวอร์ชันของ FUSION LOG ได้เกิดการระเบิด เธอเป็นสถานที่ที่สามารถพบได้บนดิสก์ของคุณขึ้นอยู่กับซอฟต์แวร์ที่คุณติดตั้ง:
SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64 C: \ Program ไฟล์ (x86) \ Microsoft
SDK: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
Cs \ Program Files (x86) SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64
เครื่องมือ C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0
เครื่องมือ C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1
SDK: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin
ในกรณีของฉันช่วยพิมพ์ชื่อดิสก์เป็นตัวพิมพ์เล็ก
ผิด - C: \ some โฟลเดอร์
ถูกต้อง - c: \ someFolder