У меня есть очень простое консольное приложение, которое работает полностью, как ожидалось, на 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. После выполнения обоих этих действий приложение работало так, как ожидалось.
Вы развернули все необходимые DLL? – thumbmunkeys
Установлен ли .NET 4.5 на ваш тестовый сервер? – Steven
Да, .NET 4.5 установлен на тестовом сервере. Я собираюсь проверить DLL - все имеют «скопировать локальную» в true, но мне нужно подтвердить, что копирование действительно произошло. – ewomack