题
我有一个强有力的组件,安装在特定文件夹(而不是GAC)上。
反射器中所示的名称是:
"Foo.Bar.TreeFrog, Version=1.2.1.0, Culture=neutral, PublicKeyToken=ac88c4a8b22089b4"
和安装的路径是
"c:\\QueueBall"
我可以用吗 Assembly.Load
或者 Assembly.LoadFrom
加载它,如果是这样,如何?
我能否确保尊敬强烈的命名,即我加载的DLL真的是我期望的,而不是同名的冒名顶替者?
解决方案
您可以使用 负载:
var assembly = Assembly.LoadFrom(@"c:\QueueBall\Foo.Bar.TreeFrog.dll");
请注意,这还将将引用的组件加载到运行此代码的应用程序域中。如果您不想要这种行为,则可以使用 负载文件 方法。
更新:
您可以在加载之前检查程序集身份,以确保尚未篡改它:
AssemblyName an = AssemblyName.GetAssemblyName(@"c:\QueueBall\Foo.Bar.TreeFrog.dll");
byte[] key = an.GetPublicKey();
Version version = an.Version;
不隶属于 StackOverflow