如何在.NET中启用程序集绑定失败日志记录(Fusion)?
fuslogvw.exe
以管理员身份运行,以避免出现任何权限问题。
如何在.NET中启用程序集绑定失败日志记录(Fusion)?
fuslogvw.exe
以管理员身份运行,以避免出现任何权限问题。
Answers:
将以下值添加到
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的命令提示符下从开始菜单或Fusion日志查看器) -我的标准设置为:
c:\FusionLogs
(重要:确保已在文件系统中实际创建了此文件夹。)完成后,请记住要关闭注销!
(我刚刚将其发布在类似的问题上-我认为这也很重要。)
fuslogvw
不仅以admin身份运行,而且还以引发异常的Visual Studio项目正在使用的正确 Windows SDK路径运行。检查其csproj并在其中搜索SDK(我的sdk节点名为TargetFrameworkSDKToolsDirectory
)。使用不匹配的fuslogvw版本似乎无法捕获异常(这很有意义...)
如果您的计算机上安装了Windows SDK,则可以在Microsoft SDK \ Tools下找到“ Fusion Log Viewer”(只需在Vista或Windows 7/8的开始菜单中键入“ Fusion”)。启动它,单击“设置”按钮,然后选择“日志绑定失败”或“记录所有绑定”。
如果这些按钮被禁用,请返回到开始菜单,右键单击Log Viewer,然后选择“以管理员身份运行”。
设置以下注册表值:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion!EnableLog](DWORD)为1
要禁用,请将其设置为0或删除该值。
[edit]:将以下文本以Windows注册表编辑器格式保存到文件,例如FusionEnableLog.reg:
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
在融合日志设置查看器换剧本是酒吧没有做到这一点的最好办法。
在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数据:
如果已经启用了日志记录,但在Windows 7 64位上仍然出现此错误,请在IIS 7.5中尝试以下操作:
创建一个新的应用程序池
转到此应用程序池的“高级设置”
将启用32位应用程序设置为True
指向您的Web应用程序以使用此新池
只是一小部分可以帮助他人的信息;如果您沿着某个目录中的所有程序集搜索继承/实现类/接口的类而执行某些操作,那么如果遇到与您自己的程序集有关的错误,请确保清除陈旧的程序集。
该场景将类似于:
简而言之: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的版本号爆炸了。根据所安装的软件,可以在磁盘上找到该文件的位置:
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工具
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1工具
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin