我希望使用Powershell脚本在当前文件夹中以调试模式列出DLL。 是否可以这样做,请您帮忙准备脚本吗?
谢谢@Moerwald。根据您提供的脚本和参考,已对其进行了扩展以递归地运行给定文件夹中的所有DLL。您可以看看它。
Get-ChildItem -Filter *.dll -Recurse |
ForEach-Object {
$AssemblyName= $_.FullName;
try {
$Assembly = [Reflection.Assembly]::LoadFile($AssemblyName);
$type = [System.Type]::GetType("System.Diagnostics.DebuggableAttribute");
$debugAttribute = $Assembly.GetCustomAttributes($type,$false);
If ($debugAttribute.count -Eq 0) {} #{$_.Name + ":Release"}
Elseif ($debugAttribute[0].IsJITOptimizerDisabled -eq $false) {} #{$_.Name + ":Release"}
Else {$_.Name + ":Debug"}
} catch{ "***ERROR*** Error when loading assembly: " + $AssemblyName + $_.Exception.Message}
}
答案 0 :(得分:0)
$type = [System.Type]::GetType("System.Diagnostics.DebuggableAttribute")
$path = "$($($pwd).Path)\xyz.dll"
$loadedAss = [System.Reflection.Assembly]::LoadFile($path)
$loadAss.GetCustomAttributes($type, $false)
如果程序集是在调试模式下编译的,则结果如下:
IsJITTrackingEnabled : True
IsJITOptimizerDisabled : True
DebuggingFlags : Default, IgnoreSymbolStoreSequencePoints, EnableEditAndContinue, DisableOptimizations
TypeId : System.Diagnostics.DebuggableAttribute
对于发布模式:
IsJITTrackingEnabled : False
IsJITOptimizerDisabled : False
DebuggingFlags : IgnoreSymbolStoreSequencePoints
TypeId : System.Diagnostics.DebuggableAttribute
简单功能(无错误检查):
function Is-AssemblyDebugOne {
[CmdletBinding()]
param (
[ValidateScript({Test-Path $_ })]
[string]
$absolutePathToAssembly
)
begin {
$type = [System.Type]::GetType("System.Diagnostics.DebuggableAttribute")
}
process {
$loadedAss = [System.Reflection.Assembly]::LoadFile($absolutePathToAssembly)
$debugAttribute = $loadedAss.GetCustomAttributes($type, $false)
$debugAttribute[0].IsJITOptimizerDisabled -eq $true -and $debugAttribute[0].IsJITTrackingEnabled -eq $true
}
end {
}
}
希望有帮助。