2010-07-12 6 views
0

Я создаю службу 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.

ответ

3

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

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

-d

+0

У меня нет конкретного файла NServiceBus.Host.Exe.Config для этого проекта. Однако метод Main() в NServiceBus.Host.Exe вызывает ConfigureServiceInIsolation() в IRunnerConfigurator, переданном Action в RunnerConfigurator.New(), который, как я полагаю, вызовет это поведение? – arootbeer

+0

Я бы попытался запустить не изолированно и посмотреть, исправляет ли это вашу проблему. Если вы все еще хотите работать изолированно, вы можете попробовать, основываясь на ваших путях с файлами «AppDomain.CurrentDomain.BaseDirectory» – drusellers

+0

Этот код является частью NServiceBus.Host.exe; Я не контролирую это. По крайней мере, я знаю, что он делает сейчас, и почему. Я планировал добавить конфигурационное местоположение плагина - это просто ускорило эту часть проекта :) – arootbeer

0

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

+0

Отредактировано - спасибо Udi. Я проверил с коллегой, что так мы ожидаем, что он сработает. Это определенно не то, что происходит. Кажется, это происходит в Топшельфе. Я отредактирую свой вопрос на полноту и возможность использования форматирования. – arootbeer

0

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

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