Я создаю службу NServiceBus, и когда я запускаю ее (либо при отладке через Visual Studio, либо из командной строки), NServiceBus.Host.exe, похоже, переводит библиотеки DLL, которые он запускает в мою папку AppData.Почему NServiceBus.Host.exe не работает с моим кодом?
Приложение зависит от ресурсов, существующих в папке bin \ debug (например, в папке с плагинами, содержащей библиотеки DLL), но эти ресурсы не копируются во временную папку.
Моей средой является Windows 7 x64, и я попытался запустить Visual Studio и мою командную строку в качестве администратора без изменений в поведении.
EDIT
поведение, как представляется, произойдет в Topshelf. Когда я отлаживаюсь с точкой останова в конце конструктора моей конечной точки, он сначала останавливается, когда конечная точка построена в основном методе Program.cs; окружающая среда в этой точке:
? GetType().Assembly.CodeBase "file:///C:/Projects/ProcessorService/ProcessorService/bin/Debug/ProcessorService.DLL" ? GetType().Assembly.Location "C:\\Projects\\ProcessorService\\ProcessorService\\bin\\Debug\\ProcessorService.dll"
Однако, когда конструктор вызывается снова, на этот раз из конструктора GenericHost, это среда:
? GetType().Assembly.CodeBase "file:///C:/Projects/ProcessorService/ProcessorService/bin/Debug/ProcessorService.DLL" ? GetType().Assembly.Location "C:\\Users\\MyUser\\AppData\\Local\\assembly\\dl3\\D5KV9218.DO9\\YOKC5KD8.C92\\4474672e\\06519009_7623cb01\\ProcessorService.DLL"
Я не тянул вниз Topshelf код для отладки, чтобы увидеть, где именно происходит перемещение dll. Но это определенно происходит в NServiceBus.Host.Exe.
У меня нет конкретного файла NServiceBus.Host.Exe.Config для этого проекта. Однако метод Main() в NServiceBus.Host.Exe вызывает ConfigureServiceInIsolation() в IRunnerConfigurator, переданном Action в RunnerConfigurator.New(), который, как я полагаю, вызовет это поведение? –
arootbeer
Я бы попытался запустить не изолированно и посмотреть, исправляет ли это вашу проблему. Если вы все еще хотите работать изолированно, вы можете попробовать, основываясь на ваших путях с файлами «AppDomain.CurrentDomain.BaseDirectory» – drusellers
Этот код является частью NServiceBus.Host.exe; Я не контролирую это. По крайней мере, я знаю, что он делает сейчас, и почему. Я планировал добавить конфигурационное местоположение плагина - это просто ускорило эту часть проекта :) – arootbeer