2017-02-06 7 views
0

На самом деле в моем приложении установки работает следующий код. Но, если я называю это из единичного тестового проекта, tmpDom.DoCallBack (theCallback); вызывает исключение. Я раздели код уже до скелета «ничего не делаю», но никаких изменений в любом случае!Неожиданное исключение из DoCallBack() из AppDomain

using System; 
using System.Diagnostics; 
using System.Reflection; 
using System.Runtime.InteropServices; 

namespace Setup 
{ 
    internal class BMRegAsm 
    { 
     public bool RegisterDll() 
     { 
     AppDomain tmpDom = AppDomain.CreateDomain("DOMAIN-XYZ"); 
     string theName= tmpDom.FriendlyName; // Returns the correct name! 
     try 
     { 
      CrossAppDomainDelegate theCallback = new CrossAppDomainDelegate(BMRegAsm.RegX); 
      tmpDom.DoCallBack(theCallback); 
     } 
     catch (Exception exc) 
     { 
      Trace.WriteLine("==RegisterDll== " + exc.Message); 
     } 
     } 

     private static void RegX() // Due to "static"-callback, no frmMain objects available. 
     { 
     } 
    } 
} 

следующее исключение по tmpDom.DoCallBack (theCallback);

==RegisterDll== Die Datei oder Assembly "Setup, Version=4.14.4.199, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden. 

Извините за немецкий текст. Это означает, что система не может найти указанный файл.

Даже у меня есть CallStack, я не могу оценить, что случилось. tmpDom.FriendlyName возвращает правильное имя.

Есть ли у кого-нибудь идеи, что вызывает исключение?

ответ

0

Щелкните правой кнопкой мыши на тестовом проекте, чтобы узнать, что представляет собой выходная папка тестовой сборки. Сравните этот список файлов с файлами в папке вывода приложения «Настройка» и посмотрите, какой файл отсутствует.

Чтобы добавить отсутствующий файл там несколько путей, зависит от файла. Например:

  • Установите для параметра «Копировать локальное» значение true для ссылочного файла.

  • Добавить копию команды на события после сборки

+0

Выходные каталоги обоих проектов одинаковы. Я удивлен, что файл отсутствует, так или иначе, потому что код не использует какой-либо файл !? –

+0

Как называется недостающий файл? вы запускаете тест и приложение Setup на одном компьютере? – KernelMode

+0

Нет упоминания. Fllowing показывает стек, последняя строка: '\t mscorlib.dll! System.Reflection.RuntimeAssembly.nLoad (System.Reflection.AssemblyName fileName, string codeBase, System.Security.Policy.Evidence assemblySecurity, System.Reflection.RuntimeAssembly locationHint, ref System.Threading.StackCrawlMark stackMark, System.IntPtr pPrivHostBinder, bool throwOnFileNotFound, bool forIntrospection, bool suppressSecurityChecks) \t Неизвестно –