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

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

代码如下:
C# code
 //创建新的Domain
            domain = AppDomain.CreateDomain(name);
            Type type = typeof(SmartPluginInstanceFactory);

            //创建工厂实例化
            factory = (SmartPluginInstanceFactory)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName);
            //factory = (SmartPluginInstanceFactory)domain.CreateInstance(type.Assembly.FullName, type.FullName).Unwrap();


代码如上我的代码,该代码在Plugin程序集中,用CS架构或者控制台程序时都没问题,但B/S架构就明明这个Plugin集就有了,但报上面这种错。纠结呀,我发现在C/S架构和B/S架构下, Type type = typeof(SmartPluginInstanceFactory);type对象有一些不同,求指定呀!急

------解决方案--------------------

是不是少了什么DLL的引用?
------解决方案--------------------
dll引用少了吧?你看看项目中有没,
------解决方案--------------------
如果是自己開發的,才可以說dll之間沒有關聯
------解决方案--------------------
是不是生成的DLL版本比你的BS的要高?
重新生成一下DLL,把框架改低试试。
------解决方案--------------------
应该是当前路径的问题,asp.net的当前路径在 c:\windows下的什么地方。

试一试下面的代码:

namespace SeperateAppDomainTest
{
class Program
{
static void Main(string[] args)
{
LoadAssembly();
}

public static void LoadAssembly()
{
string pathToDll = Assembly.GetExecutingAssembly().CodeBase;
AppDomainSetup domainSetup = new AppDomainSetup { PrivateBinPath = pathToDll };
var newDomain = AppDomain.CreateDomain("FooBar", null, domainSetup);
ProxyClass c = (ProxyClass)(newDomain.CreateInstanceFromAndUnwrap(pathToDll, typeof(ProxyClass).FullName));
Console.WriteLine(c == null);

Console.ReadKey(true);
}
}

public class ProxyClass : MarshalByRefObject { }
------解决方案--------------------
temporary是存放预编译文件的地方,aspnet和应用程序运行机制不一样,你用该指定确切的dll地址,用type只会有这个结果