【发布时间】:2016-04-16 11:47:25
【问题描述】:
我有一个带有以下代码的 C# 2.0 类:
public class MyClass : MarshalByRefObject, IDisposable
{
private string _appName;
private AppDomain _app;
public MyClass(string appName)
{
_appName = appName;
_app = AppDomain.CreateDomain("NewDomain" + _appName);
_app.DoCallBack(new CrossAppDomainDelegate(CallBackMethod));
}
public void Dispose()
{
AppDomain.Unload(_app);
}
public static void CallBackMethod()
{
//some operations
}
}
此类包含在类库项目下,然后从 Web 应用程序项目中引用。
所以,在我的网页中,我只是实例化了该对象,期望类的构造函数会创建新的 AppDomain 并执行指定的操作:
MyClass objMyClass = new MyClass("12022012213456");
但我不断收到此错误:
无法加载文件或程序集“MyNamespace.MyClass,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。
但这里奇怪的是,这个异常发生在这一行:
_app.DoCallBack(new CrossAppDomainDelegate(CallBackMethod));
如您所见,它发生在 MyClass 上,所以我不明白如果代码已经在执行,它怎么会告诉我找不到程序集?我只是不明白。
顺便说一句,我是使用 AppDomain 的新手,也许我对某些概念感到困惑。
【问题讨论】:
-
你能在 _app = AppDomain.Create 行之后找出 __app.BaseDirectory 和 _app.RelativeSearchPath 属性吗?每个应用程序域都必须解析自己的程序集。将其视为流程中的流程。由于某种原因,新的应用程序域找不到程序集,RelativeSearchPath 和 BaseDirectory 可能会提供一些线索。
-
@Adam 的值为:RelativeSearchPath = null; BaseDirectory = "c:\WINNT\Microsoft.NET\Framework\v2.0.50727\",它们好吗?