我有一个强有力的组件,安装在特定文件夹(而不是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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top