为什么不是';t NServiceBus.Host.exe是否在原地运行我的代码?

为什么不是';t NServiceBus.Host.exe是否在原地运行我的代码?,nservicebus,topshelf,Nservicebus,Topshelf,我正在构建一个NServiceBus服务,当我启动它时(通过Visual Studio在调试中或从命令行启动),NServiceBus.Host.exe似乎正在将它正在运行的DLL重新定位到我的AppData文件夹中 应用程序依赖于bin\debug文件夹中存在的资源(例如,包含DLL的插件文件夹),但这些资源不会复制到临时文件夹中 我的环境是Windows7x64,我尝试以管理员身份运行VisualStudio和命令提示符,但行为没有改变 编辑 这种行为似乎发生在Topshelf内部。当我在端

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

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

我的环境是Windows7x64,我尝试以管理员身份运行VisualStudio和命令提示符,但行为没有改变

编辑

这种行为似乎发生在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" ? 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" ? 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\\U 7623cb01\\ProcessorService.DLL”
我还没有把TopShelf代码拉下来调试,以查看dll移动的确切位置。但这肯定发生在NServiceBus.Host.Exe中。

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

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

我猜您是在Topshelf所谓的“隔离”模式下运行您的服务,在该模式下,我们对所有程序集进行卷影复制

请发布您的topshelf/nsb.host配置


-d

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

请发布您的topshelf/nsb.host配置


-d

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

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

编辑-谢谢Udi。我已经和一位同事核实过,这就是我们所期望的工作方式。这绝对不是正在发生的事情。它似乎发生在托普舍夫内部。我将编辑我的问题的完整性和使用格式的能力。编辑-谢谢Udi。我已经和一位同事核实过,这就是我们所期望的工作方式。这绝对不是正在发生的事情。它似乎发生在托普舍夫内部。我将编辑问题的完整性和使用格式的能力。我没有此项目的特定NServiceBus.Host.Exe.Config文件。但是,NServiceBus.Host.Exe中的Main()方法正在传递给RunnerConfigurator.New()中的操作的IRunnerConfiguration上调用ConfigureServiceInIsolation(),我认为这将导致此行为?我将尝试不孤立地运行,看看这是否解决了您的问题。如果您仍然希望独立运行,可以尝试将文件路径设置为“AppDomain.CurrentDomain.BaseDirectory”,相关代码是NServiceBus.Host.exe的一部分;我无法控制它。至少我知道它现在在做什么,为什么。我一直计划添加基于配置的插件位置-这只是加速了项目的这一部分:)我没有这个项目的特定NServiceBus.Host.Exe.Config文件。但是,NServiceBus.Host.Exe中的Main()方法正在传递给RunnerConfigurator.New()中的操作的IRunnerConfiguration上调用ConfigureServiceInIsolation(),我认为这将导致此行为?我将尝试不孤立地运行,看看这是否解决了您的问题。如果您仍然希望独立运行,可以尝试将文件路径设置为“AppDomain.CurrentDomain.BaseDirectory”,相关代码是NServiceBus.Host.exe的一部分;我无法控制它。至少我知道它现在在做什么,为什么。我一直计划添加基于配置的插件位置-这只是加速了项目的这一部分:)