如何:确定文件是否为程序集(C# 和 Visual Basic)

当且仅当一个文件是托管文件并且在其元数据中包含程序集入口时,该文件才是一个程序集。 有关程序集和元数据的更多信息,请参见主题 程序集清单

如何手动确定一个文件是否为程序集

  1. 启动 Ildasm.exe(IL 反汇编程序)

  2. 加载希望测试的文件。

  3. 如果 ILDASM 报告该文件不是可迁移的可执行 (PE) 文件,则它不是程序集。 有关更多信息,请参见主题如何:查看程序集内容

如何以编程方式确定一个文件是否为程序集

  1. 调用 GetAssemblyName 方法,并向其传递正在测试的文件的完整文件路径和名称。

  2. 如果引发 BadImageFormatException 异常,则该文件不是程序集。

示例

此示例测试一个 DLL 以确定它是否为程序集。

Module Module1
    Sub Main()
        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
        Console.ReadLine()
    End Sub 
End Module 
' Output (with .NET Framework 3.5 installed): 
'        Yes, the file is an Assembly.
class TestAssembly
{
    static void Main()
    {

        try
        {
            System.Reflection.AssemblyName testAssembly =
                System.Reflection.AssemblyName.GetAssemblyName(@"C:\Windows\Microsoft.NET\Framework\v3.5\System.Net.dll");

            System.Console.WriteLine("Yes, the file is an assembly.");
        }

        catch (System.IO.FileNotFoundException)
        {
            System.Console.WriteLine("The file cannot be found.");
        }

        catch (System.BadImageFormatException)
        {
            System.Console.WriteLine("The file is not an assembly.");
        }

        catch (System.IO.FileLoadException)
        {
            System.Console.WriteLine("The assembly has already been loaded.");
        }
    }
}
/* Output (with .NET Framework 3.5 installed):
    Yes, the file is an assembly.
*/

GetAssemblyName 方法加载测试文件,然后在读取信息之后释放它。

请参见

参考

AssemblyName

概念

C# 编程指南

程序集和全局程序集缓存(C# 和 Visual Basic)

其他资源

Visual Basic 编程指南