0

NServiceBusサービスを構築していますが、(Visual Studioを介したデバッグまたはコマンドラインから)NServiceBus.Host.exeを起動すると、実行中のDLLがAppDataフォルダーに再配置されているように見えます。

アプリケーションは、bin \ debugフォルダー(DLLを含むpluginsフォルダーなど)に存在するリソースに依存していますが、これらのリソースは一時フォルダーにコピーされていません。

私の環境は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"

ただし、コンストラクターが再度呼び出されると、今回は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"

dllの移動が行われている場所を正確に確認するために、TopShelfコードをデバッグしてデバッグしていません。しかし、これは間違いなく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 に答える