Почему NServiceBus.Host.exe не запускает мой код на месте?

Я создаю службу NServiceBus, и когда я запускаю ее (либо при отладке через Visual Studio, либо из командной строки), кажется, что NServiceBus.Host.exe перемещает библиотеки DLL, которые он запускает, в мою папку AppData.

Приложение зависит от ресурсов, которые существуют в папке bin\debug (например, папка плагинов, содержащая библиотеки DLL), но эти ресурсы не копируются во временную папку.

Моя среда — Windows 7 x64, и я пытался запустить как Visual Studio, так и мою командную строку от имени администратора без каких-либо изменений в поведении.

ИЗМЕНИТЬ

Поведение, по-видимому, происходит в Topshelf. Когда я выполняю отладку с помощью точки останова в конце конструктора моей конечной точки, он сначала останавливается, когда конечная точка создается в методе Main в 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.


person Matt Mills    schedule 12.07.2010    source источник


Ответы (3)


Я предполагаю, что вы запускаете свои службы в том, что Topshelf называет «изолированным» режимом, когда мы теневым образом копируем все ваши сборки.

Не могли бы вы опубликовать свою конфигурацию topshelf/nsb.host.

-d

person drusellers    schedule 15.07.2010
comment
У меня нет специального файла NServiceBus.Host.Exe.Config для этого проекта. Однако метод Main() в NServiceBus.Host.Exe вызывает ConfigureServiceInIsolation() в IRunnerConfigurator, переданном в Action‹IRunnerConfigurator› в RunnerConfigurator.New(), что, как я предполагаю, вызовет такое поведение? - person Matt Mills; 15.07.2010
comment
Я бы попробовал запустить не изолированно и посмотреть, решит ли это вашу проблему. Если вы все еще хотите работать изолированно, вы можете попробовать указать пути к файлам на основе «AppDomain.CurrentDomain.BaseDirectory». - person drusellers; 15.07.2010
comment
Рассматриваемый код является частью NServiceBus.Host.exe; Я не могу это контролировать. По крайней мере, я знаю, что он делает сейчас и почему. Я планировал добавить местоположение плагина на основе конфигурации — это только ускорило эту часть проекта :) - person Matt Mills; 21.07.2010

NServiceBus ничего не перемещает, он полностью запускается в папке bin/debug (в Visual Studio) или в установленном каталоге при прямом запуске.

person Udi Dahan    schedule 14.07.2010
comment
Отредактировано - Спасибо, Уди. Я проверил с коллегой, что мы ожидаем, что это будет работать именно так. Это определенно не то, что происходит. Кажется, это происходит внутри Topshelf. Я отредактирую свой вопрос для полноты и возможности использования форматирования. - person Matt Mills; 14.07.2010

Теневое копирование — это когда .net копирует библиотеки DLL перед их загрузкой, чтобы вы могли обновлять код без конфликтов блокировки. Это похоже на вашего преступника.

person SerialSeb    schedule 15.07.2010