2010-07-12 78 views
0

我正在構建一個NServiceBus服務,當我啓動它(無論是通過Visual Studio進行調試還是從命令行)NServiceBus.Host.exe似乎都將它運行的DLL重定位到我的AppData文件夾。爲什麼NServiceBus.Host.exe不能運行我的代碼?

應用取決於存在在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

我的猜測是,你是在什麼Topshelf呼叫「隔離」模式下運行你的服務,我們的卷影副本所有的組件。

請問您可以發佈您的topshelf/nsb.host配置。

-d

+0

我沒有該項目的特定NServiceBus.Host.Exe.Config文件。但是,NServiceBus.Host.Exe中的Main()方法在傳遞給RunnerConfigurator.New()中的Action 的IRunnerConfigurator上調用ConfigureServiceInIsolation(),我認爲這會導致此行爲? – arootbeer 2010-07-15 13:52:25

+0

我會嘗試不隔離運行,看看是否可以解決您的問題。如果你仍然想孤立運行,你可以嘗試基於你的文件路徑'AppDomain.CurrentDomain.BaseDirectory' – drusellers 2010-07-15 16:08:37

+0

有問題的代碼是NServiceBus.Host.exe的一部分;我無法控制它。至少我知道現在在做什麼,爲什麼。我一直在計劃添加基於配置的插件位置 - 這只是加速了項目的一部分:) – arootbeer 2010-07-21 18:35:24

0

NServiceBus不會重定位任何東西,它完全運行在bin/debug文件夾(在Visual Studio時),或者直接運行安裝目錄。

+0

編輯 - 謝謝Udi。我已經與一位同事驗證過,這就是我們期望它的工作原理。這絕對不是發生了什麼事情。它似乎發生在Topshelf內部。我將編輯我的問題以獲得完整性和使用格式的能力。 – arootbeer 2010-07-14 17:25:27

0

的卷影拷貝是在裝入前,.NET複製的DLL,使您無需鎖定衝突更新代碼。這看起來像你的罪魁禍首。

相關問題