0

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

应用程序依赖于 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 中。

4

3 回答 3

3

我的猜测是您在 Topshelf 所谓的“隔离”模式下运行您的服务,在这种模式下,我们会影子复制您的所有程序集。

您能否发布您的 topshelf/nsb.host 配置。

-d

于 2010-07-15T10:13:16.423 回答
0

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

于 2010-07-14T15:29:07.733 回答
0

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

于 2010-07-15T10:19:01.060 回答