繁体   English   中英

除非我首先在该程序集中实例化一个类,否则无法对引用的程序集进行Assembly.Load(String)。 怎么解决?

[英]Can't do Assembly.Load(String) with a referenced assembly unless I instantiate a class within that assembly first. How to solve?

我这里有一个很奇怪的问题。 除非我在程序集中实例化一个类,否则看起来没有程序集错误。

例如:

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo);
Object mq = Activator.CreateInstance(mqType);

在Assembly.Load上引发FileNotFound异常

这个:

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

new someClassInAssembly();

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo);
Object mq = Activator.CreateInstance(mqType);

工作正常。 是的,即使在Assembly.Load之后实例化了它,所以显然在编译过程中是个问题。 我如何明确确保程序集在运行时已加载且可找到,是否在某处设置了编译设置,我该怎么办?

通过提供路径,确保正在加载您认为正在加载的程序集:

AssemblyName an = AssemblyName.GetAssemblyName(filePath);
Assembly.Load(an);

坦白地说,如果只是一个参考或几个参考,只需在某个地方添加显式参考即可节省很多精力。

//Use a static constructor somewhere appropriate. 
static someClass(){
   new AssemblyYouCareAbout.Object();
}

替代方法是手动将dll拖到正在运行的进程的bin或将dll添加到gac。 我宁愿使用不太优雅的静态构造函数继续前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM