0

У меня есть очень простое консольное приложение, которое работает полностью, как ожидалось, на dev-машине. Это не порождает никаких ошибок. Но я переместил его на тестовый сервер (в надежде запустить его из диспетчера задач), и я получил ошибки, которые я буду включать ниже.Консольное приложение не работает после развертывания

Детали проекта: C# консольного приложения .NET 4.0 с помощью Telerik открытого доступа ОРМ, Unity 2.1.505.0 Test Server: запуск .NET 4.5

Вот как я портировать приложение: Я компиляции сборки выпуска и скопируйте папку Release на тестовый сервер (это проблема? Я читал в другом месте, что это должно работать нормально). После того, как на тестовом сервере, я дважды щелкните EXE-файл в папке скопированного выпуска и это сообщение:

Problem signature: 
    Problem Event Name: CLR20r3 
    Problem Signature 01: TheProgram.exe 
    Problem Signature 02: 1.0.0.0 
    Problem Signature 03: 52f01aa9 
    Problem Signature 04: Anonymously Hosted DynamicMethods Assembly 
    Problem Signature 05: 0.0.0.0 
    Problem Signature 06: 0 
    Problem Signature 07: 0 
    Problem Signature 08: ffffffff 
    Problem Signature 09: AVANCNVQQH3AW3N14UWVEHHCIAYOLYLS 
    OS Version: 6.1.7601.2.1.0.274.10 
    Locale ID: 1033 
    Additional Information 1: 8e3d 
    Additional Information 2: 8e3d05599b3d6894d98ff944d1bc5d05 
    Additional Information 3: 527f 
    Additional Information 4: 527fbc2b98d11a1bd024767ee818ba21 

Зритель событий тестового сервера содержит следующую информацию об ошибке:

Application: TheProgram.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: Microsoft.Practices.Unity.ResolutionFailedException 
Stack: 
    at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(System.Type, System.Object, System.String, System.Collections.Generic.IEnumerable`1<Microsoft.Practices.Unity.ResolverOverride>) 
    at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(System.Type, System.String, System.Collections.Generic.IEnumerable`1<Microsoft.Practices.Unity.ResolverOverride>) 
    at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Practices.Unity.IUnityContainer, Microsoft.Practices.Unity.ResolverOverride[]) 
    at TheProgram.Program.Main(System.String[]) 

Этих похоже, что Unity не может решить проблему зависимости. Но опять же, ошибки на машине dev отсутствуют.

Установка Unity довольно проста. Большинство из них находится в методе Program.Main():

// Initialize Unity DI Elements 
      var UnityContainer = new UnityContainer(); 
      UnityContainer.RegisterType<IRepository, Repository>(new ContainerControlledLifetimeManager()); 
      UnityContainer.RegisterType<IDataService, DataService>(new ContainerControlledLifetimeManager()); 
      UnityContainer.RegisterType<ISpreadsheetService, SpreadsheetService>(new ContainerControlledLifetimeManager()); 
      UnityContainer.RegisterType<IEmailService,EmailService>(new ContainerControlledLifetimeManager()); 
      UnityContainer.RegisterType<IDateService,DateService>(new ContainerControlledLifetimeManager()); 


      var data = UnityContainer.Resolve<IDataService>(); 
      var sheet = UnityContainer.Resolve<ISpreadsheetService>(); 
      var email = UnityContainer.Resolve<IEmailService>(); 
      var dates = UnityContainer.Resolve<IDateService>(); 

Консоль вывода на точки тестового сервера в первую строку второго блока - тот, который разрешающий IDataService.

DataService также довольно простой DI-мудрый. Вот его конструктору информация:

public class DataService : IDataService 
    { 
     private readonly IRepository _repo; 

     public DataService(IRepository repo) 
     { 
      _repo = repo; 
     } 

И хранилище не имеет зависимостей (? Хотя я называю Resolve <> на него в любом случае - это проблема)

Я довольно новыми для единства, но это кажется довольно простой реализацией.

У кого-нибудь есть идеи, почему возникает ошибка при попытке запустить .exe на тестовом сервере? Спасибо!

UPDATE: Проблема происходит, когда я включаю строку: данные уаг = unityContainer.Resolve<IDataService>();

До этого момента он работает. Этот класс также имеет зависимость, как показано выше. IRepository вводится в его конструктор - эта зависимость обрабатывается правильно? И правильный ли синтаксис для Unity?

Второе обновление: приложение больше не отображает ошибки. Я обнаружил 2 проблемы ... во-первых, зависимость не была решена в коде, так что это было исправлено; во-вторых, приложение искало Telerik .dlls. Я добавил их в папки bin. После выполнения обоих этих действий приложение работало так, как ожидалось.

+1

Вы развернули все необходимые DLL? – thumbmunkeys

+0

Установлен ли .NET 4.5 на ваш тестовый сервер? – Steven

+0

Да, .NET 4.5 установлен на тестовом сервере. Я собираюсь проверить DLL - все имеют «скопировать локальную» в true, но мне нужно подтвердить, что копирование действительно произошло. – ewomack

ответ

0

Я должен был бы согласиться с thumbmunkeys. Это почти наверняка проблема с отсутствующей сборкой или, возможно, с неправильной версией сборки. Проверьте это и посмотрите.

+0

Вот и мои мысли тоже идут. Я проверю это и посмотрю, что я нахожу. – ewomack

+0

Да, там отсутствовали .dll, только те, которые, как я думал, отсутствовали. – ewomack

Смежные вопросы