วิธีการเปิดใช้งานแอสเซมบลีบันทึกความล้มเหลวในการผูก (ฟิวชั่น) ใน. NET


818

ฉันจะเปิดใช้งานการบันทึกการเชื่อมต่อล้มเหลวของชุดประกอบ (ฟิวชั่น) ใน. NET ได้อย่างไร


46
หากใครสนใจที่จะใช้ fusion logger (fuslogvw.exe) อ่านบทความนี้: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx จะบอกคุณว่าจะดาวน์โหลดได้ที่ไหนและข้อมูลอื่น ๆ

13
@Will - ขอบคุณสำหรับการแบ่งปัน! เป็นโบนัส - ตรวจสอบให้แน่ใจว่าคุณใช้งานfuslogvw.exeในฐานะผู้ดูแลระบบเพื่อหลีกเลี่ยงปัญหาสิทธิ์ใด ๆ
SliverNinja - MSFT

13
@ ฉันจะไม่เห็นด้วยว่าการติดตั้ง fuslogvw เป็นคำตอบที่ "ดีที่สุด" หากคุณสามารถรับเครื่องมือได้โดยไม่ต้องติดตั้ง Windows SDK ทั้งหมดในสภาพแวดล้อมที่ไม่น่าเป็นไปได้สำหรับการพัฒนาคุณควรมีประเด็น
Coxy

2
@ แน่นอน แต่คำตอบที่คุณลิงก์จะไม่ครอบคลุมถึงสิ่งนั้น
Coxy

8
@ จะโปรดไม่เป็นเด็กเกี่ยวกับเรื่องนี้ คุณเป็นคนหนึ่งที่พยายามรวบรวมตัวแทนโดยการส่งเสริมคำตอบที่ในขณะที่มีประโยชน์ชุมชนได้ตัดสินว่ามีประโยชน์น้อยกว่าคนอื่น ๆ ซึ่งเป็นเรื่องที่ง่ายกว่ามากและอีกเรื่องหนึ่งก็เหมือนกัน
Coxy

คำตอบ:


868

เพิ่มค่าต่อไปนี้ลงใน

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ ฟิวชั่น
เพิ่ม:
DWORD ForceLog ตั้งค่าเป็น 1
DWORD LogFailures ตั้งค่าเป็น 1
DWORD LogResourceBinds ตั้งค่าเป็น 1
DWORD EnableLog ตั้งค่าเป็น 1
String LogPath ตั้งค่าเป็นโฟลเดอร์สำหรับบันทึก (เช่น C: \ FusionLog \)

ให้แน่ใจว่าคุณรวมถึงเครื่องหมายหลังชื่อโฟลเดอร์และว่าโฟลเดอร์ที่มีอยู่

คุณต้องรีสตาร์ทโปรแกรมที่คุณใช้เพื่อบังคับให้อ่านการตั้งค่ารีจิสทรีเหล่านั้น

อย่าลืมปิดการบันทึกการฟิวชั่นเมื่อไม่ต้องการ

ป้อนคำอธิบายรูปภาพที่นี่


23
โซลูชันของ Gary ทำงานให้ฉันแม้ว่าฉันจะต้องทำตามด้วยการรีเซ็ต IIS หมายเหตุฉันกำหนดค่าสิ่งนี้ในสภาพแวดล้อมที่สะอาดซึ่งฉันไม่ต้องการติดตั้ง SDK และไม่ชอบ
Michhes

5
รับการรายงานจากบางส่วนว่าการเปลี่ยนแปลงรีจิสทรีไม่ได้ดำเนินการทันที คุณได้ลองเปิดการบันทึก Fusion แล้วทำการรีบูตเครื่อง
Gary Kindel

54
คุณต้องรีสตาร์ทโปรแกรมใด ๆ ที่คุณใช้เพื่ออ่านการตั้งค่ารีจิสทรี
Orion Edwards

50
Fusion Log Viewer ทำทุกอย่างให้คุณ ไปที่เริ่ม -> โปรแกรม -> xxx Studio เสมือนจริง> เครื่องมือ Visual Studio> พรอมต์คำสั่ง Visual Studio (เรียกใช้ในฐานะผู้ดูแลระบบ) และพิมพ์ "fuslogvw" ในการตั้งค่าคุณปรับการบันทึก
r3mark

10
การเปิด / ปิดการเข้าสู่ระบบที่มีประโยชน์เราได้สร้างไฟล์ .reg ซึ่งจะขึ้นอยู่กับคำตอบของแกรี่ Kindel: การเปิดใช้งานและปิดการใช้งาน
Igor Kustov

271

ฉันมักจะใช้ Fusion Log Viewer ( Fuslogvw.exeจากพรอมต์คำสั่ง Visual Studioหรือ Fusion Log Viewer จากเมนูเริ่ม) - การตั้งค่ามาตรฐานของฉันคือ:

  • เปิด Fusion Log Viewer ในฐานะผู้ดูแลระบบ
  • คลิกการตั้งค่า
  • ตรวจสอบการเปิดใช้งานที่กำหนดเองเส้นทางบันทึกช่องทำเครื่องหมาย
  • ป้อนตำแหน่งที่คุณต้องการให้บันทึกเพื่อเขียนเช่นc:\FusionLogs( สำคัญ:ตรวจสอบให้แน่ใจว่าคุณได้สร้างโฟลเดอร์นี้ในระบบไฟล์แล้ว)
  • ตรวจสอบให้แน่ใจว่าระดับการบันทึกที่ถูกต้องเปิดอยู่ (บางครั้งฉันเพียงแค่เลือกบันทึกทั้งหมดเชื่อมโยงกับดิสก์เพียงเพื่อให้แน่ใจว่าสิ่งต่าง ๆ ทำงานถูกต้อง)
  • คลิกตกลง
  • ตั้งค่าตัวเลือกตำแหน่งบันทึกเป็นกำหนดเอง

อย่าลืมออกจากระบบเมื่อคุณทำเสร็จแล้ว!

(ฉันเพิ่งโพสต์นี้ในคำถามที่คล้ายกัน - ฉันคิดว่ามันเกี่ยวข้องกับที่นี่ด้วย)


4
โปรดทราบว่าในกรณีที่คุณโฮสต์รันไทม์ด้วยตัวเองจากแอปพลิเคชันดั้งเดิมคุณจะต้องใช้เส้นทางบันทึกที่กำหนดเองด้วยเหตุผลบางประการไม่เช่นนั้นคุณจะไม่ได้บันทึกอะไรเลย
jpierson

อย่างน้อยในสถานการณ์ของฉันฉันไม่จำเป็นต้องตั้งค่าเส้นทางบันทึกที่กำหนดเอง สิ่งที่ฉันต้องทำก็คือเปิดการเข้าสู่ระบบเช่น "เข้าสู่ระบบทั้งหมดผูกกับดิสก์" ในกล่องโต้ตอบการตั้งค่า
Josh

42
เรียกใช้ในฐานะผู้ดูแลระบบในกรณีของฉันไม่เช่นนั้นตัวเลือกทั้งหมดจะถูกปิดใช้งาน
vezenkov

2
หมายเหตุ: สร้างโฟลเดอร์เป็น Admin!
Tabrock

6
ตรวจสอบให้แน่ใจว่าคุณกำลังทำงานfuslogvwไม่เพียง แต่เป็นผู้ดูแลระบบ แต่ยังมาจากเส้นทาง Windows SDK ที่ถูกต้องโครงการ Visual Studio ที่กำลังดำเนินการอยู่ ตรวจสอบ csproj และค้นหา SDK ภายใน (ชื่อโหนด sdk ของฉันTargetFrameworkSDKToolsDirectory) การใช้รุ่นที่ไม่ตรงกัน fuslogvw ดูเหมือนจะไม่จับข้อยกเว้น (ซึ่งเหมาะสม ... )
Veverke

191

หากคุณติดตั้ง Windows SDK ไว้ในเครื่องของคุณคุณจะพบ "Fusion Log Viewer" ภายใต้ Microsoft SDK \ Tools (เพียงพิมพ์ "Fusion" ในเมนูเริ่มบน Vista หรือ Windows 7/8) เปิดใช้งานคลิกปุ่มการตั้งค่าและเลือก "Log bind failure" หรือ "Log all binds"

หากปุ่มเหล่านี้ถูกปิดใช้งานให้กลับไปที่เมนูเริ่มต้นคลิกขวาที่ Log Viewer และเลือก "Run as Administrator"


6
ปุ่มเหล่านั้นถูกปิดการใช้งานสำหรับฉัน - ทำไม
Tim Lovell-Smith

14
@Tim ไม่เคยเห็นมาก่อน - สามารถใช้สิทธิ์ผู้ดูแลระบบได้หรือไม่ เป็น HKEY_LOCAL_MACHINE ที่กำลังแก้ไขหลังจากทั้งหมด
ซามูเอลแจ็ค

2
"การตั้งค่าการเข้าสู่ระบบล้มเหลว" ก็เพียงพอที่จะพบปัญหาของฉัน
pauloya

1
ตรวจสอบให้แน่ใจว่าโฟลเดอร์อนุญาตให้เข้าถึงการเขียน UAC และ c: \ logs เล่นได้ไม่ดีกับบันทึกการหลอมรวม
Edward Wilde

4
เช่นเดียวกับในกรณีที่ปุ่มถูกปิดใช้งานให้เรียกใช้งานเครื่องมือบันทึกฟิวชั่นอีกครั้งด้วยสิทธิ์ของผู้ดูแลระบบ
Bruno Lopes

86

ตั้งค่ารีจิสทรีต่อไปนี้:

[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 และละเว้นคำเตือนเกี่ยวกับความเสียหายที่อาจเกิดขึ้น


4
ไม่ใช่ว่ารายการนั้นอาจไม่มีอยู่ - คุณจะต้องสร้างมันขึ้นมา อย่างน้อยผมทำเมื่อผมกำลังจะตอบคำถามนี้เพียงแค่ก่อนที่จะตกในช่วงเช้านี้ :)
จอนสกีต

3
อะไร ! หมายความว่าอย่างไร คีย์หรือค่า? แล้วระบบ 64 บิตล่ะ
Bruno Martinez

48
จริงๆแล้วมันใช้งานได้ ... คุณแค่ต้องรัน iisreset afterwords เพื่อให้มันทำงานได้
Nick DeMayo

4
@Norman: เนื่องจากการตั้งค่านี้ใช้เพื่อทำให้ข้อผิดพลาด Asp.Net แสดงข้อความข้อผิดพลาดการรวมแอสเซมบลีในหน้าข้อผิดพลาดไม่บันทึกล็อกไปยังไฟล์ @OP: +1 แก้ไขเพื่อรวมไฟล์. reg ตัว! รูปแบบเป็นสิ่งที่ฉันไม่เคยเห็นมาก่อนยกเว้นในข้อความแสดงข้อผิดพลาดที่ส่งฉันมาที่หน้านี้เพื่อค้นหาคำตอบ
Brian

2
คุณไม่จำเป็นต้องรีเซ็ต IIS - เพียงแอพพลิเคชั่นที่เกี่ยวข้อง หรืออย่างน้อยนั่นคือทั้งหมดที่ฉันต้องทำ
Kenny Evitt

81

คุณสามารถเรียกใช้สคริปต์ 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

4
ขอบคุณ! ฉันอนุญาตให้ฉันใส่คำสั่งของคุณลงในส่วนสำคัญนี้ และฉันจะเพิ่มการสร้างของc:\FusionLogdir เพื่อให้คนที่ไม่ลืมว่า ;-)
โอลิเวอร์

กฎบรรทัดคำสั่ง! ฉันสามารถเล่นซ้ำสิ่งนี้ได้อย่างรวดเร็วโดยใช้เทคโนโลยีการนำกลับมาใช้ใหม่ที่เรียกว่า "cut and paste" ขอบคุณ
Remigijus Pankevičius

20

สคริปต์เปลี่ยนฟิวชั่นเข้าสู่การตั้งค่าแสดงเป็นแถบไม่มีวิธีที่ดีที่สุดที่จะทำนี้

ในASP.NETมันมีความยุ่งยากในบางครั้งที่จะทำให้มันทำงานได้อย่างถูกต้อง สคริปต์นี้ใช้งานได้ดีและได้รับการจดทะเบียนในรายการPower Tool ของ Scott Hanselmanเช่นกัน ฉันใช้มันเป็นการส่วนตัวมาหลายปีแล้วและมันก็ไม่ทำให้ฉันผิดหวัง


ps ทำให้แน่ใจว่าคุณปิดการใช้งานหลังจากที่ทำงานหรือโฟลเดอร์นี้อาจมีขนาดใหญ่มาก
Adam Tuliper - MSFT

นี่คือเหตุผลที่ฉันใช้ ETW เพื่อบันทึกข้อมูลเฉพาะในกรณีที่ฉันต้องการจริงๆไม่ใช่ทุกครั้งในไฟล์บันทึกขนาดใหญ่ที่น่าเกลียด
magicandre1981

13

แทนที่จะใช้ไฟล์บันทึกที่น่าเกลียดคุณสามารถเปิดใช้งาน 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 ได้:

กิจกรรมฟิวชั่นใน PerfView


@YuriBondarchuk สิ่งนี้จะเปิดใช้งานได้ตามความต้องการและคุณมีข้อมูลเพิ่มเติมใน ETL (กระบวนการอื่น ๆ ข้อมูลการแปลงไฟล์) เพื่อให้คุณสามารถให้ไฟล์แก่ผู้ใช้รายอื่นและพวกเขาสามารถรับข้อมูลได้มากขึ้นเมื่อเทียบกับบันทึกฟิวชั่นปกติ
magicandre1981

12

ผมเขียนโปรแกรมดูบันทึกผูกพันประกอบชื่อฟิวชั่น ++ และวางไว้บน GitHub

คุณสามารถรับรุ่นล่าสุดได้จากที่นี่หรือทาง chocolatey ( choco install fusionplusplus)

ฉันหวังว่าคุณและผู้เยี่ยมชมบางส่วนในที่นี้จะสามารถช่วยชีวิตนาทีที่คุ้มค่าไว้ได้

ฟิวชั่น ++


1
ท่านที่รักคุณเป็นพระเจ้า!
Sylvain Girard

1
นั่นเป็นเครื่องมือที่น่าทึ่งขอบคุณมาก!
simoneL

3

หากคุณได้เปิดใช้งานการบันทึกแล้วและคุณยังคงได้รับข้อผิดพลาดนี้ใน Windows 7 64 บิตให้ลองใน IIS 7.5:

  1. สร้างกลุ่มแอปพลิเคชันใหม่

  2. ไปที่การตั้งค่าขั้นสูงของแอพพลิเคชั่นนี้

  3. ตั้งค่าเปิดใช้แอปพลิเคชั่น 32 บิตเป็นTrue

  4. ชี้แอปพลิเคชันเว็บของคุณเพื่อใช้กลุ่มใหม่นี้


คุณช่วยชีวิตฉันไว้ฉันใช้เวลาประมาณ 8 ชั่วโมงในการแก้ไขปัญหา ขอบคุณมาก. :)
Dika Arta Karunia

3

เพียงข้อมูลเล็กน้อยที่อาจช่วยผู้อื่น ถ้าคุณทำบางอย่างตามบรรทัดของการค้นหาแอสเซมบลีทั้งหมดในบางไดเรกทอรีสำหรับคลาสที่สืบทอด / ใช้คลาส / อินเทอร์เฟซให้แน่ใจว่าคุณล้างแอสเซมบลีเก่าถ้าคุณได้รับข้อผิดพลาดนี้เกี่ยวข้องกับแอสเซมบลีของคุณ

สถานการณ์จะเป็นดังนี้:

  1. แอสเซมบลี A โหลดแอสเซมบลีทั้งหมดในบางโฟลเดอร์
  2. ชุดประกอบ B ในโฟลเดอร์นี้ค้าง แต่อ้างอิงชุดประกอบ C
  3. มีแอสเซมบลี C อยู่ แต่เนมสเปซชื่อคลาสหรือรายละเอียดอื่น ๆ อาจมีการเปลี่ยนแปลงในเวลาที่ผ่านไปตั้งแต่แอสเซมบลี B กลายเป็นเก่า (ในกรณีของฉันเนมสเปซถูกเปลี่ยนผ่านกระบวนการ refactoring)

ในระยะสั้น: A --- โหลด -> B (เก่า) --- อ้างอิง ---> C

หากสิ่งนี้เกิดขึ้นสัญญาณปากโป้งเพียงอย่างเดียวคือเนมสเปซและคลาสในข้อความแสดงข้อผิดพลาด ตรวจสอบอย่างใกล้ชิด หากคุณไม่พบที่ใดก็ได้ในโซลูชันของคุณคุณอาจลองโหลดชุดประกอบเก่า


3

สำหรับผู้ที่ขี้เกียจนิดหน่อยผมแนะนำให้เรียกใช้ไฟล์นี้เป็นไฟล์ 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

1

ในกรณีที่คุณสงสัยเกี่ยวกับตำแหน่งของ 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


0

ในกรณีของฉันช่วยพิมพ์ชื่อดิสก์เป็นตัวพิมพ์เล็ก

ผิด - C: \ some โฟลเดอร์

ถูกต้อง - c: \ someFolder

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.