.NET में असेंबली बाइंड विफलता लॉगिंग (फ़्यूज़न) को सक्षम करने के लिए कैसे करें


818

मैं .NET में असेंबली बाइंड फेल लॉगिंग (फ़्यूज़न) कैसे सक्षम करूँ?


46
अगर किसी को परवाह है, तो फ्यूजन लॉगर (fuslogvw.exe) का उपयोग करने के लिए इस लेख को पढ़ें: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx यह बताता है कि इसे कहां डाउनलोड करना है और अन्य जानकारी।

13
@Will - साझा करने के लिए धन्यवाद! एक बोनस के रूप में - सुनिश्चित करें कि आप fuslogvw.exeकिसी भी अधिकार के मुद्दों से बचने के लिए व्यवस्थापक के रूप में चलते हैं।
स्लीवरनिंजा - MSFT

13
@Will मैं असहमत हूं कि fuslogvw स्थापित करना "सर्वश्रेष्ठ" उत्तर है। यदि आप पूरे विंडोज एसडीके को स्थापित करने के बिना सिर्फ उपकरण प्राप्त कर सकते हैं, तो संभवतः एक विकास का माहौल नहीं है तो आपके पास एक बिंदु होगा।
कॉक्सी

2
@ निश्चित रूप से, लेकिन आप जिस लिंक से लिंक करते हैं, उसका कोई उत्तर नहीं मिलता है।
कोक्सी

8
@ कृपया इसके बारे में इतना बचकाना मत बनो। आप एक उत्तर को बढ़ावा देकर प्रतिनिधि को इकट्ठा करने की कोशिश कर रहे हैं, जबकि उपयोगी होने पर, समुदाय ने दूसरों की तुलना में कम सहायक का न्याय किया है, एक जो बहुत आसान है और दूसरा जो व्यावहारिक रूप से समान है।
कोक्सी

जवाबों:


868

निम्न मान जोड़ें

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ फ्यूजन
जोड़ें:
DWORD ForceLog 1 पर मान सेट करता है
DWORD LogFailures 1 पर मान सेट करता है
DWORD LogResourceBinds 1 पर मान सेट करता है
DWORD EnableLog 1 पर मान सेट करता है
लॉग करने के लिए फ़ोल्डर में स्ट्रिंग लॉगपथ सेट मान (जैसे C: \ FusionLog \)

सुनिश्चित करें कि आपने फ़ोल्डर नाम के बाद बैकस्लैश शामिल किया है और यह कि फ़ोल्डर मौजूद है

आपको उस प्रोग्राम को पुनः आरंभ करने की आवश्यकता है जिसे आप उन रजिस्ट्री सेटिंग्स को पढ़ने के लिए बाध्य करने के लिए चला रहे हैं।

वैसे, जरूरत न होने पर फ्यूजन लॉगिंग को बंद करना न भूलें।

यहां छवि विवरण दर्ज करें


23
गैरी के समाधानों ने मेरे लिए काम किया, हालांकि मुझे IIS रीसेट करके भी पालन करना पड़ा। नोट मैंने इसे एक स्वच्छ वातावरण में कॉन्फ़िगर किया है जहां मैं एसडीके और इस तरह स्थापित नहीं करना चाहता था।
माइकल जूल

5
कुछ ने बताया कि रजिस्ट्री परिवर्तन तुरंत नहीं होता है। क्या आपने फ़्यूज़न लॉगिंग को फिर से रीबूट करने की कोशिश की है?
गैरी किंडेल

54
आपको इसके लिए जो भी कार्यक्रम शुरू करने की आवश्यकता है, उसे उन रजिस्ट्री सेटिंग्स को पढ़ने की आवश्यकता है
ओरियन एडवर्ड्स

50
फ्यूजन लॉग व्यूअर आपके लिए वह सब करता है। स्टार्ट -> प्रोग्राम्स -> विजुअल स्टूडियो xxxx> विजुअल स्टूडियो टूल्स> विजुअल स्टूडियो कमांड प्रॉम्प्ट (रन एडमिन के रूप में) पर जाएं और "fuslogvw" टाइप करें। सेटिंग्स में आप लॉगिंग को समायोजित करते हैं।
r3mark

10
लॉगिंग को चालू / बंद करने के लिए, मैंने .reg फाइलें बनाई हैं, जो गैरी किंडल के उत्तर पर आधारित हैं: सक्षम और अक्षम करना
इगोर कुस्तोव

271

मैं आमतौर पर एक दृश्य स्टूडियो कमांड प्रॉम्प्ट से फ्यूजन लॉग व्यूअर ( Fuslogvw.exe) या स्टार्ट मेनू से फ्यूजन लॉग व्यूअर का उपयोग करता हूं) - मेरा मानक सेटअप है:

  • व्यवस्थापक के रूप में ओपन फ्यूजन लॉग व्यूअर
  • सेटिंग्स पर क्लिक करें
  • कस्टम लॉग पथ चेकबॉक्स सक्षम करें की जाँच करें
  • उस स्थान को दर्ज करें जिसे आप लॉग करना चाहते हैं, उदाहरण के लिए, c:\FusionLogs( महत्वपूर्ण: यह सुनिश्चित करें कि आपने वास्तव में इस फ़ोल्डर को फ़ाइल सिस्टम में बनाया है।)
  • सुनिश्चित करें कि लॉगिंग का सही स्तर चालू है (मैं कभी-कभी बस यह सुनिश्चित करने के लिए डिस्क पर सभी बाइंड्स का चयन करता हूं कि चीजें सही काम कर रही हैं)
  • ओके पर क्लिक करें
  • लॉग स्थान विकल्प को कस्टम पर सेट करें

एक बार जब आप कर रहे हैं लॉगिंग बंद करने की बारी याद रखें!

(मैंने इसे इसी तरह के प्रश्न पर पोस्ट किया है - मुझे लगता है कि यह यहां भी प्रासंगिक है।)


4
ध्यान दें कि जिन मामलों में आप स्वयं को एक मूल एप्लिकेशन से रनटाइम होस्ट कर रहे हैं, आपको किसी कारण से कस्टम लॉग पथ का उपयोग करने की आवश्यकता होगी अन्यथा आपको कुछ भी लॉग इन नहीं मिलेगा।
जिपरसन

कम से कम मेरी स्थिति में, मुझे वास्तव में कस्टम लॉग पथ सेट करने की आवश्यकता नहीं थी। मुझे बस इतना करना था कि सेटिंग डायलॉग पर "सभी बाइंड्स टू डिस्क को लॉग करें" जैसे लॉग ऑन करना था।
जोश

42
मेरे मामले में व्यवस्थापक के रूप में चलाने की आवश्यकता थी, अन्यथा सभी विकल्प अक्षम थे।
वेजेनकोव

2
नोट: फ़ोल्डर को व्यवस्थापक के रूप में बनाएँ!
तबर्रुक

6
सुनिश्चित करें कि आप fuslogvwन केवल व्यवस्थापक के रूप में चल रहे हैं, बल्कि सही विंडोज एसडीके पथ से दृश्य स्टूडियो परियोजना को भी फेंक रहे हैं, अपवाद का उपयोग कर रहा है। इसकी csproj की जाँच करें और एसडीके के भीतर खोजें (मेरे sdk नोड का नाम है TargetFrameworkSDKToolsDirectory)। एक गैर मिलान fuslogvw संस्करण का उपयोग अपवादों को पकड़ने के लिए नहीं लगता है (जो समझ में आता है ...)
विवेके

191

यदि आपके पास विंडोज़ एसडीके आपकी मशीन पर स्थापित है, तो आपको माइक्रोसॉफ्ट एसडीके \ टूल्स के तहत "फ्यूजन लॉग व्यूअर" मिलेगा (विस्टा या विंडोज 7/8 पर स्टार्ट मेनू में "फ्यूजन" टाइप करें)। इसे लॉन्च करें, सेटिंग्स बटन पर क्लिक करें, और "लॉग बाइंड विफलता" या "सभी बाइंड को लॉग करें" चुनें।

यदि ये बटन अक्षम हैं, तो प्रारंभ मेनू पर वापस जाएं, लॉग व्यूअर पर राइट-क्लिक करें, और "व्यवस्थापक के रूप में चलाएँ" चुनें।


6
वे बटन मेरे लिए अक्षम हैं - क्यों?
टिम लोवेल-स्मिथ

14
@ पहले, यह नहीं देखा कि - क्या यह विशेषाधिकारों के साथ किया जा सकता है? यह HKEY_LOCAL_MACHINE है जिसे सभी के बाद संशोधित किया जा रहा है।
सैमुअल जैक

2
"सेटिंग्स, लॉग बाइंड विफलताओं" मेरी समस्या को खोजने के लिए पर्याप्त था।
पौल्यो

1
सुनिश्चित करें कि फ़ोल्डर लिखने की अनुमति देता है। यूएसी और सी: \ लॉग फ्यूजन लॉग के साथ अच्छा नहीं खेलते हैं
एडवर्ड वाइल्ड

4
एक नोट के रूप में, यदि बटन अक्षम हैं, तो व्यवस्थापक विशेषाधिकारों के साथ फ्यूजन लॉग दर्शक को फिर से चलाएं।
ब्रूनो लोप्स

86

निम्न रजिस्ट्री मान सेट करें:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) से 1

अक्षम करने के लिए, 0 पर सेट करें या मान हटाएं।

[संपादित करें]: निम्नलिखित फ़ाइल को एक फ़ाइल में सहेजें, जैसे कि FusionEnableLog.reg, Windows रजिस्ट्री संपादक प्रारूप में:

Windows Registry Editor Version 5.00

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

फिर विंडोज एक्सप्लोरर से फाइल चलाएं और संभावित नुकसान के बारे में चेतावनी को अनदेखा करें।


4
ऐसा नहीं है कि प्रविष्टि संभवतः मौजूद नहीं है - आपको इसे बनाना होगा। कम से कम, मैंने तब किया जब मैं आज सुबह दुर्घटना से पहले इस सवाल का जवाब देने वाला था :)
जॉन स्कीट

3
इससे क्या होता है ! क्या मतलब है? कुंजी या मूल्य? 64 बिट सिस्टम के बारे में क्या?
ब्रूनो मार्टिनेज

48
वास्तव में, यह काम करता है ... आपको इसे काम करने के लिए आईरिससेट आफ्टरवर्ड चलाने की जरूरत है।
निक डेमैयो

4
@ नोर्मन: क्योंकि यह विशेष सेटिंग Asp.Net त्रुटियों को त्रुटि पृष्ठों में असेंबली बाइंडिंग त्रुटि संदेश दिखाने के लिए उपयोग की जाती है, न कि लॉग्स को फ़ाइल में सहेजने के लिए। @OP: +1। .Reg फ़ाइल शामिल करने के लिए संपादित किया गया। ! प्रारूप वह है जो मैंने कभी नहीं देखा था, केवल त्रुटि संदेश के अलावा जिसने मुझे इस पृष्ठ पर उत्तर की तलाश में भेजा था।
ब्रायन

2
आपको IIS - बस संबंधित एप्लिकेशन पूल को रीसेट करने की आवश्यकता नहीं है। या कम से कम मुझे बस इतना ही करना था।
केनी एविट

81

FL को सक्षम करने के लिए आप इस Powershell स्क्रिप्ट को व्यवस्थापक के रूप में चला सकते हैं:

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 के निर्माण को जोड़ा ताकि लोग इसे भूल न जाएं ;-)
ओलिवर

कमांड लाइन नियम! मैं "कट एंड पेस्ट" नाम की अब तक की सबसे बेहतरीन आविष्कार की गई अब तक की पुन: प्रयोज्य तकनीक का उपयोग करके इसे फिर से दोहरा सकता हूं। धन्यवाद।
रेमीजियस पांकेविअसियस

20

फ्यूजन लॉग सेटिंग व्यूअर परिवर्तक स्क्रिप्ट कोई भी सबसे अच्छा तरीका यह करने के लिए बार है।

में ASP.NET , यह मुश्किल हो गया है बार सही ढंग से काम करने के लिए इसे पाने के लिए पर। यह स्क्रिप्ट महान काम करती है और स्कॉट हैन्समैन के पावर टूल सूची में भी सूचीबद्ध थी । मैं व्यक्तिगत रूप से इसे सालों से इस्तेमाल कर रहा हूं और इसने मुझे कभी निराश नहीं किया।


ps यह सुनिश्चित करें कि आप इसे चलाने के बाद निष्क्रिय कर दें या यह फ़ोल्डर काफी बड़ा हो जाए
एडम तुलिपर - MSFT

यही कारण है कि मैं ईटीडब्ल्यू का उपयोग करता हूं, केवल डेटा लॉग करने के लिए अगर मुझे वास्तव में उनकी आवश्यकता है, हर समय बदसूरत बड़ी लॉग फ़ाइल में नहीं।
Magicandre1981

13

बदसूरत लॉग फ़ाइल का उपयोग करने के बजाय, आप GUID और कीवर्ड (0x4) के साथ DotnetRuntime निजी प्रदाता ( ) को चालू करके ETW / xperf के माध्यम से फ्यूजन लॉग को सक्रिय कर सकते हैं ।Microsoft-Windows-DotNETRuntimePrivate763FD754-7086-4DFE-95EB-C01A46FAF4CAFusionKeyword

@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 में फ्यूजन इवेंट


@YuriBondarchuk इसे मांग पर सक्रिय करता है और आपके पास ETL (अन्य प्रक्रियाएं, फाइलवर्सन डेटा) में अधिक डेटा है ताकि आप फ़ाइलों को अन्य उपयोगकर्ताओं को दे सकें और वे सामान्य फ्यूजन लॉग की तुलना में अधिक जानकारी प्राप्त कर सकें
मैजिकएंड्रिए 1981

12

मैंने फ्यूजन ++ नामक एक असेंबली बाइंडिंग लॉग व्यूअर लिखा और इसे GitHub पर डाला

आप नवीनतम रिलीज़ यहाँ से या चॉकलेटी ( choco install fusionplusplus) के माध्यम से प्राप्त कर सकते हैं ।

मुझे आशा है कि आप और यहाँ के कुछ आगंतुक इसके साथ कुछ योग्य जीवनकाल के मिनटों को बचा सकते हैं।

फ्यूजन ++


1
प्रिय महोदय, आप एक भगवान हैं!
सिल्वेन गिरार्ड

1
यह एक अद्भुत उपकरण है, बहुत बहुत धन्यवाद!
सिमोनएल

3

यदि आपके पास पहले से लॉगिंग सक्षम है और आपको अभी भी यह त्रुटि विंडोज 7 64 बिट पर मिलती है, तो इसे IIS 7.5 में देखें:

  1. एक नया एप्लिकेशन पूल बनाएं

  2. इस एप्लिकेशन पूल की उन्नत सेटिंग्स पर जाएं

  3. 32-बिट अनुप्रयोग को True पर सक्षम करें सेट करें

  4. इस नए पूल का उपयोग करने के लिए अपने वेब एप्लिकेशन को इंगित करें


यार, तुम मेरा दिन बचाते हो, मुझे इस मुद्दे को सुलझाने में लगभग 8 घंटे लगे। बहुत धन्यवाद। :)
दीका अर्त करुणिया

3

बस थोड़ी सी जानकारी जो दूसरों की मदद कर सकती है; यदि आप कक्षाओं / इंटरफ़ेसों को इनहेरिट करने / लागू करने वाली कक्षाओं के लिए कुछ निर्देशिका में सभी असेंबलियों की खोज करने की तर्ज पर कुछ करते हैं, तो सुनिश्चित करें कि यदि आप अपनी एक असेंबली से संबंधित यह त्रुटि प्राप्त करते हैं, तो आप बासी असेंबली को साफ़ कर दें।

परिदृश्य कुछ इस तरह होगा:

  1. असेंबली ए सभी असेंबली को किसी फ़ोल्डर में लोड करता है
  2. इस फ़ोल्डर में असेंबली बी बासी है, लेकिन असेंबली सी का संदर्भ देती है
  3. असेंबली C मौजूद है, लेकिन नाम स्थान, वर्ग के नाम या कुछ अन्य विवरण उस समय में बदल सकते हैं जो असेंबली बी के बाद से बासी हो गया है (मेरे मामले में एक नामस्थान को एक रिफैक्टिंग प्रक्रिया के माध्यम से बदल दिया गया था)

संक्षेप में: ए --- लोड -> बी (बासी) --- संदर्भ ---> सी

यदि ऐसा होता है, तो त्रुटि संदेश में एकमात्र गप्पी संकेत नाम और वर्गनाम है। इसे बारीकी से परखें। यदि आप इसे अपने समाधान में कहीं भी नहीं पाते हैं, तो आप बासी विधानसभा को लोड करने की कोशिश कर रहे हैं।


3

जो लोग थोड़े आलसी हैं, उनके लिए मैं इसे एक बैट फाइल के रूप में चलाने की सलाह देता हूं, जब भी आप इसे सक्षम करना चाहते हैं:

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 की ओर जाने के बाद FUSION LOG के वर्जन का 4.5 नंबर फट गया है। उसके स्थान हैं जहाँ यह आपके डिस्क पर पाया जा सकता है, सॉफ्टवेयर पर निर्भर करता है जो आपने स्थापित किया है:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 टूल \ x64

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 उपकरण \ x 64

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 उपकरण

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin


0

मेरे मामले में निचले मामले में डिस्क का नाम टाइप करने में मदद की

गलत - C: \ someFolder

सही - c: \ someFolder

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.