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

问题描述 投票:0回答:2

我这里有一个非常奇怪的问题。看起来除非我在程序集中实例化一个类,否则我会收到程序集未找到错误。

例如:

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之后实例化的,所以显然是编译时的问题。如何明确确保程序集已加载并且在运行时可找到,某处是否有编译设置,我需要做什么?

c# reflection assemblies
2个回答
0
投票

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

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

0
投票

老实说,如果只是一个或几个引用,只需在某处添加显式引用即可,这样会节省您很多精力。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.