为什么NServiceBus.Host.exe没有运行我的代码?

时间:2010-07-12 16:59:31

标签: nservicebus topshelf

我正在构建一个NServiceBus服务,当我启动它时(无论是通过Visual Studio调试,还是从命令行调试),NServiceBus.Host.exe似乎正在将正在运行的DLL重定位到我的AppData文件夹。 / p>

应用程序依赖于bin \ debug文件夹中存在的资源(例如包含DLL的插件文件夹),但这些资源未被复制到临时文件夹。

我的环境是Windows 7 x64,我尝试以管理员身份运行Visual Studio和命令提示符,但行为没有变化。

修改

这种行为似乎发生在Topshelf中。当我在端点的构造函数的末尾使用断点进行调试时,它首先在Program.cs的Main方法中构造端点时停止;此时的环境是:

? 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 个答案:

答案 0 :(得分:3)

我的猜测是你在Topshelf所谓的“隔离”模式下运行你的服务,我们在那里阴影复制你的所有程序集。

请你发布你的topshelf / nsb.host配置。

-d

答案 1 :(得分:0)

NServiceBus不重新定位任何内容,它完全在bin / debug文件夹(在Visual Studio中)或直接运行时安装的目录中运行。

答案 2 :(得分:0)

卷影复制是指.net在加载dll之前复制dll,使您能够更新代码而不会发生锁定冲突。这看起来像是你的罪魁祸首。