C# C反射实用程序

C# C反射实用程序,c#,.net,reflection,C#,.net,Reflection,我编写了以下实用程序类来获取任何名称为className的类的实例 public class AssemblyUtils { private AssemblyUtils() { } public static T GetInstance<T>(string assemblyName, string className) { T classInstance = defaul

我编写了以下实用程序类来获取任何名称为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;
        }
注意,我从同一sln中的不同程序集调用了AssemblyUtils.GetInstance


如何解析程序集路径?

我猜它找不到程序集,因为它不在同一文件夹中,也不在GAC或系统正在查找的其他目录中


您需要将它们移动到执行程序集所在的同一文件夹中。您可以使用更改加载程序集的文件夹。

我猜它找不到程序集,因为它不在同一文件夹中,也不在GAC或系统正在查找的其他目录中


您需要将它们移动到执行程序集所在的同一文件夹中。您可以使用更改加载程序集的文件夹。

我认为,要加载MyNamespace.DA.dll的程序集依赖于另一个程序集,而该程序集不在您要查找的文件夹中。将依赖程序集复制到您找到MyNamespace.DA.dll程序集的文件夹中。

我认为,您要加载MyNamespace.DA.dll的程序集依赖于另一个程序集,而该程序集不在您要查找的文件夹中。将相关程序集复制到您找到MyNamespace.DA.dll程序集的文件夹中。

检查您的bin\Debug文件夹,MyNamespace.DA.dll是否在该文件夹中?如果不是的话,你必须手动把它移到那里。可能会添加一个后置条件,以便自动复制它。还可以尝试使用完整程序集强名称


还有JMSA,在其他线程上进行一些升级投票并接受答案如何?

检查您的bin\Debug文件夹,该文件夹中是否有MyNamespace.DA.dll?如果不是的话,你必须手动把它移到那里。可能会添加一个后置条件,以便自动复制它。还可以尝试使用完整程序集强名称


还有JMSA,在你的另一个线程上进行一些向上投票并接受答案如何?

正如瓦迪姆提到的Assembly.Load将只在有限的位置查看。Assembly.LoadFrom对您来说可能是一个更好的选择。它采用指向程序集的文件名路径


Assembly.Load根据程序集名称工作,而不是路径。

正如Vadim提到的Assembly.Load将仅在有限的一组位置中查找。Assembly.LoadFrom对您来说可能是一个更好的选择。它采用指向程序集的文件名路径


Assembly.Load根据程序集名称而不是路径工作。

Ok buddy!你明白了。但是你能不能也给我一张赞成票,这样负面的观点就被抹平了?我认为你的问题是公平的,已经做到了-是-2。好的,伙计!你明白了。但是你能不能也给我一张赞成票,这样负面的观点就被抹平了?我认为你的问题是公平的,已经这样做了-它在-2。PrivateBinPath只能设置为应用程序的基本目录下的文件夹。不能仅将其设置为任何文件夹。因此,只要程序集位于应用程序的文件夹层次结构中的某个位置,这项功能就会起作用。PrivateBinPath只能设置为应用程序的基本目录下的文件夹。不能仅将其设置为任何文件夹。因此,只要程序集位于应用程序的文件夹层次结构中的某个位置,这就可以工作。
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.