我这里有一个非常奇怪的问题。看起来除非我在程序集中实例化一个类,否则我会收到程序集未找到错误。
例如:
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 中。我宁愿使用不太优雅的静态构造函数并继续前进。