如果文件
,我如何检查VB.NetC:\文件\将Test.exe
是.net二进制文件还是原生二进制文件?
答案 0 :(得分:7)
How to: Determine If a File Is an Assembly (C# and Visual Basic)上的MSDN:
如何以编程方式确定文件是否为程序集
- 调用
GetAssemblyName
方法,传递您正在测试的文件的完整文件路径和名称。- 如果抛出
醇>BadImageFormatException
异常,则该文件不是程序集。
它甚至有一个VB.NET示例:
Try Dim testAssembly As Reflection.AssemblyName = Reflection.AssemblyName.GetAssemblyName("C:\Windows\Microsoft.NET\Framework\v3.5\System.Net.dll") Console.WriteLine("Yes, the file is an Assembly.") Catch ex As System.IO.FileNotFoundException Console.WriteLine("The file cannot be found.") Catch ex As System.BadImageFormatException Console.WriteLine("The file is not an Assembly.") Catch ex As System.IO.FileLoadException Console.WriteLine("The Assembly has already been loaded.") End Try
这并不理想,因为它使用控制流的异常。
我也不确定它在角落的情况下是如何表现的,例如文件是程序集,但不支持当前的CPU体系结构,或者它是否针对不支持的框架变体。
答案 1 :(得分:0)
我正在编写一个通用的用法函数来补充@Loki答案:
''' <summary>
''' Determines whether an exe or dll file is an .Net assembly.
''' </summary>
''' <param name="File">Indicates the exe/dll file to check.</param>
''' <returns><c>true</c> if file is an .Net assembly, <c>false</c> otherwise.</returns>
Friend Function FileIsNetAssembly(ByVal [File] As String) As Boolean
Try
System.Reflection.AssemblyName.GetAssemblyName([File])
' The file is an Assembly.
Return True
Catch exFLE As IO.FileLoadException
' The file is an Assembly but has already been loaded.
Return True
Catch exBIFE As BadImageFormatException
' The file is not an Assembly.
Return False
End Try
End Function