日期:2014-05-18  浏览次数:21113 次

C#反射技术问题,加载的DLL中引用其他DLL无法正常加载
下面是反射代码

C# code

            Assembly _Assembly=null;
            string WinPath = Path.Combine(Application.StartupPath, "DLL");
                _Assembly=Assembly.LoadFile(WinPath+"\\frmRight.dll");
                Type _Type = _Assembly.GetType("frmRight.frmRight");
                Form frm = (Form)Activator.CreateInstance(_Type);
                frm.MdiParent = this;
                frm.MaximizeBox = false;
                frm.MinimizeBox = false;
                frm.Show();
                frm.WindowState = FormWindowState.Maximized;



很简单的反射代码,位的就是加载一个窗体dll,然后实例化对象,将他作为主窗体的一个MDI子窗体。
但是在这个dll中,引用了一个名为SysConfig.dll,导致在加载的时候,IDE会提示一个错误

未能加载文件或程序集“SysConfig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。

我将dll引用到的其他自己写的dll放到同一个目录下面,依然会出这个错误!请教下如何解决这个问题?

------解决方案--------------------
string path=AssemblyName;//项目的Assembly选项名称
string name=strName; //类的名字
Form fm=(Form)Assembly.Load(path).CreateInstance(name);
版本和DLL路径
------解决方案--------------------
探讨
string path=AssemblyName;//项目的Assembly选项名称
string name=strName; //类的名字
Form fm=(Form)Assembly.Load(path).CreateInstance(name);
版本和DLL路径

------解决方案--------------------
需要把相关依赖项同时放入程序能找的到的地方,比如bin,比如exe同级目录,比如GAC
------解决方案--------------------
放在同一个目录下好了~
------解决方案--------------------
更改项目属性-》生成——》输出路径
这样,项目生成的时候就可以直接把dll生成到你指定的目录了
还有就是,你可以把dll放到一个解决方案下的文件夹中,作为一个ShareBin
这样项目生成引用的时候就会直接从ShareBin中找
------解决方案--------------------
问题应该出现在你的frmRight.dll对SysConfig.dll引用时。
看看frmRight引用dll是的路径是否是相对dll本身,还是相对exe的。