AppDomain DoCallBack FileNotFoundException - C # - PullRequest
1 голос
/ 04 марта 2012

У меня есть класс 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
        }
    }

Этот класс содержится в проекте библиотеки классов, а затем на него ссылаются из проекта веб-приложения.

Итак, на моей веб-странице я просто создаю экземпляр объекта, ожидая, что конструктор класса создаст этот новый AppDomain и выполнит указанные операции:

MyClass objMyClass = new MyClass("12022012213456");

Но я продолжаю получать эту ошибку:

Не удалось загрузить файл или сборку 'MyNamespace.MyClass, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей. Система не может найти указанный файл.

Но любопытно, что это исключение происходит в этой строке:

_app.DoCallBack(new CrossAppDomainDelegate(CallBackMethod));

И, как вы можете видеть, это происходит на MyClass , поэтому я не понимаю, как он мог сказать, что сборка не может быть найдена, если код уже выполняется ??? Я просто не понимаю

Кстати, я новичок в использовании AppDomain, возможно, я запутался с какой-то концепцией.

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Похоже, что у созданного вами домена приложения (_app) возникают проблемы с поиском класса MyClass в его сборке.Ваш CreateDomain не предоставил никакой AppDomainSetup информации, поэтому он не имеет контекста для текущих каталогов доменов приложений или сборок.У вас есть два варианта, предоставить правильно настроенный AppDomainSetup или позвонить _app.Load(Assembly.GetExecutingAssembly.FullName) до вашего DoCallBack метода.

0 голосов
/ 31 октября 2014

У меня была эта проблема, но решение было другим.В моей ситуации мне нужно было явно указать свой собственный объект AppDomainSetup и указать папку ApplicationBase, чтобы он мог фактически найти мою сборку.

Мой код был загружен другим приложением, и поэтому мойсборка не может быть найдена с использованием настроек по умолчанию.

...