我正在构建一个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。
答案 0 :(得分:3)
我的猜测是你在Topshelf所谓的“隔离”模式下运行你的服务,我们在那里阴影复制你的所有程序集。
请你发布你的topshelf / nsb.host配置。
-d
答案 1 :(得分:0)
NServiceBus不重新定位任何内容,它完全在bin / debug文件夹(在Visual Studio中)或直接运行时安装的目录中运行。
答案 2 :(得分:0)
卷影复制是指.net在加载dll之前复制dll,使您能够更新代码而不会发生锁定冲突。这看起来像是你的罪魁祸首。