.NETでアセンブリバインドエラーログ(Fusion)を有効にするにはどうすればよいですか?
fuslogvw.exe
権利の問題を回避するために、管理者として実行してください。
.NETでアセンブリバインドエラーログ(Fusion)を有効にするにはどうすればよいですか?
fuslogvw.exe
権利の問題を回避するために、管理者として実行してください。
回答:
次の値を
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion 追加: DWORD ForceLogの値を1に設定 DWORD LogFailuresは値を1に設定します DWORD LogResourceBindsが値を1に設定 DWORD EnableLogに値を1に設定 文字列LogPathは、ログのフォルダーに値を設定します(例:C:\ FusionLog \)
フォルダ名の後にバックスラッシュを含め、フォルダが存在することを確認してください。
実行中のプログラムを再起動して、これらのレジストリ設定を読み取らせる必要があります。
ちなみに、不要な場合はフュージョンログをオフにすることを忘れないでください。
私は通常の融合ログビューアを使用(Fuslogvw.exeではをからのVisual Studioコマンドプロンプトスタートメニューから、または融合ログビューア) -私の標準設定は次のとおりです。
c:\FusionLogs
(重要:このフォルダーがファイルシステムに実際に作成されていることを確認してください)。完了したら、必ずログオフをオフにしてください!
(私はこれを同様の質問に投稿しました-ここでも関連があると思います。)
fuslogvw
管理者としてだけでなく、例外をスローしているVisual Studioプロジェクトが使用している正しい Windows SDKパスからも実行していることを確認してください。そのcsprojを確認し、SDKを検索します(私のsdkノードの名前はですTargetFrameworkSDKToolsDirectory
)。一致しないfuslogvwバージョンを使用すると、例外がキャッチされないようです(これは理にかなっています...)
マシンにWindows SDKがインストールされている場合、Microsoft SDK \ Toolsの下に「Fusion Log Viewer」があります(VistaまたはWindows 7/8のスタートメニューで「Fusion」と入力するだけです)。それを起動し、「設定」ボタンをクリックして、「バインド失敗のログ」または「すべてのバインドのログ」を選択します。
これらのボタンが無効になっている場合は、スタートメニューに戻り、ログビューアを右クリックして、[管理者として実行]を選択します。
次のレジストリ値を設定します。
[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
次に、Windowsエクスプローラーからファイルを実行し、破損の可能性に関する警告を無視します。
この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
Fusionのログ設定ビューアチェンジャースクリプトは、これを行うための最善の方法バーnoneです。
ではASP.NET、これが正常に動作させるために時にはトリッキーされています。このスクリプトはうまく機能し、Scott HanselmanのPower Toolリストにもリストされました。私は何年もの間それを個人的に使用しており、決して失望させることはありません。
醜いログファイルを使用する代わりに、GUID とキーワード(0x4)をオンにしてDotnetRuntime Privateプロバイダー()をオンにすることにより、ETW / xperf経由でFusionログをアクティブ化することもできMicrosoft-Windows-DotNETRuntimePrivate
ます。763FD754-7086-4DFE-95EB-C01A46FAF4CA
FusionKeyword
@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
PerfViewで ETLファイルを開き、イベントテーブルの下を見ると、Fusionデータが見つかります。
Fusion ++という名前のアセンブリバインディングログビューアを作成して、GitHubに配置しました。
ここから、またはChocolatey(choco install fusionplusplus
)から最新のリリースを入手できます。
あなたとここの訪問者の何人かが、それによって価値ある一生の時間を節約できることを願っています。
ログを有効にしてもWindows 7 64ビットでこのエラーが発生する場合は、IIS 7.5でこれを試してください。
新しいアプリケーションプールを作成する
このアプリケーションプールの詳細設定に移動します
32ビットアプリケーションを有効にするをTrueに設定します。
この新しいプールを使用するようにWebアプリケーションをポイントする
他人を助けるかもしれないほんの少しの情報。クラス/インターフェイスを継承/実装するクラスのディレクトリですべてのアセンブリを検索する行に沿って何かを行う場合、独自のアセンブリのいずれかに関するこのエラーが発生した場合は、古いアセンブリを削除してください。
シナリオは次のようになります。
つまり、A --- loads-> B(stale)--- references ---> 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のバージョンの数が急増しました。彼女は、インストールしたソフトウェアに応じて、ディスク上で見つけることができる場所です。
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ 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 Tools \ x64
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin