我编写了以下Utility类来获取任何类名“className”的实例。
public class AssemblyUtils
{
private AssemblyUtils()
{
}
public static T GetInstance<T>(string assemblyName, string className)
{
T classInstance = default(T);
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(assemblyName);
object o = assembly.CreateInstance(className);
if (o is T)
{
classInstance = (T)o;
}
else
{
o = null;
}
return classInstance;
}
我称之为:
IMyInterface ins = AssemblyUtils.GetInstance<IMyInterface>(@"MyNamespace.DA.dll", "MyClassDA");
但是我收到以下错误消息:
Could not load file or assembly 'MyNamespace.DA.dll' or one of its dependencies. The system cannot find the file specified.
请注意,我从处于同一sln的单独程序集中调用了AssemblyUtils.GetInstance()。
如何解决装配路径???
答案 0 :(得分:5)
我的猜测是它找不到汇编,因为它不在同一个文件夹中,也不在GAC或系统正在寻找的其他目录中。
您需要将它们移动到执行程序集所在的同一文件夹中。您可以使用AppDomainSetup.PrivateBinPath Property更改装入程序集的文件夹。
答案 1 :(得分:1)
我认为,您要加载的程序集(MyNamespace.DA.dll)依赖于另一个程序集,该程序集不在您正在查找的文件夹中。将依赖程序集复制到您找到MyNamespace.DA.dll程序集的文件夹中。
答案 2 :(得分:1)
检查你的bin \ Debug文件夹,该文件夹中的MyNamespace.DA.dll是什么?如果不是,你将不得不手动移动它。也许添加一个后置条件,以便自动复制。还可以尝试使用完整的程序集强名称。
同样是JMSA,你的另一个帖子上有些赞成和接受答案怎么样?
答案 3 :(得分:1)
Vadim提到了Assembly.Load只会在一组有限的地方看。 Assembly.LoadFrom可能是一个更好的选择。它需要一个路径(带文件名)到程序集。
Assembly.Load使用程序集名称,而不是路径。