【问题标题】:Load strongly-name assembly from specific path?从特定路径加载强名称程序集?
【发布时间】:2010-06-23 17:10:22
【问题描述】:

我有一个强命名程序集,安装到特定文件夹(而不是 GAC)。

Reflector中显示的名字是:

"Foo.Bar.TreeFrog, Version=1.2.1.0, Culture=neutral, PublicKeyToken=ac88c4a8b22089b4"

它的安装路径是

"c:\\QueueBall"

我可以使用Assembly.LoadAssembly.LoadFrom 来加载它吗?如果可以,如何加载?

我能否确保使用强命名,即我正在加载的 DLL 确实是我所期望的,而不是具有相同名称的冒名顶替者?

【问题讨论】:

  • 啧啧啧。直接从驱动器的根目录创建自己的文件夹不是一个好主意。
  • @Joel -- 这不是我能控制的,唉。这不是我的 DLL,也不是来自我的安装程序。

标签: c# assembly.load


【解决方案1】:

你可以使用LoadFrom:

var assembly = Assembly.LoadFrom(@"c:\QueueBall\Foo.Bar.TreeFrog.dll");

请注意,这也会将引用的程序集加载到运行此代码的应用程序域中。如果您不想要这种行为,您可以使用LoadFile 方法。


更新:

您可以在加载之前检查程序集标识,以确保它没有被篡改:

AssemblyName an = AssemblyName.GetAssemblyName(@"c:\QueueBall\Foo.Bar.TreeFrog.dll");
byte[] key = an.GetPublicKey();
Version version = an.Version;

【讨论】:

  • 谢谢。有没有办法检查强名称是否正确 - 即有人没有用相同的文件名交换他们自己的 DLL 但签名错误?
猜你喜欢
  • 1970-01-01
  • 2019-04-27
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多