0

クライアントのasp.net WebフォームソリューションにAzureサービスバス機能を実装しています。

ワーカー ロールはバスを定期的にポーリングして新しいメッセージを探します。また、バス キューにメッセージを追加する役割を担う既存の Web フォーム アプリ用に Web ロールが定義されます。

アプリをローカルで実行しようとすると、Microsoft.ServiceBus アセンブリが予期されたものと一致しないため、エラーが発生します...

 System.IO.FileLoadException was unhandled
  HResult=-2146234304
  Message=Could not load file or assembly 'Microsoft.ServiceBus, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  Source=Azure.EnquiryWorker
  FileName=Microsoft.ServiceBus, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  FusionLog==== Pre-bind state information ===
LOG: User = *Omitted*
LOG: DisplayName = Microsoft.ServiceBus, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///C:/Users/*path omitted*/*project name omitted*/csx/Debug/roles/Azure.EnquiryWorker/approot
LOG: Initial PrivatePath = C:\Users\*path omitted*/*project name omitted*\csx\Debug\roles\Azure.EnquiryWorker\approot
Calling assembly : Azure.EnquiryWorker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\*path omitted*/*project name omitted*\csx\Debug\roles\Azure.EnquiryWorker\approot\Azure.EnquiryWorker.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Microsoft.ServiceBus, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Users/*path omitted*/*project name omitted*/csx/Debug/roles/Azure.EnquiryWorker/approot/Microsoft.ServiceBus.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

  StackTrace:
       at Azure.EnquiryWorker.WorkerRole.OnStart()
       at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum)
       at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRole(RoleType roleType)
       at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<InitializeRole>b__0()
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

webforms アプリの bin フォルダーには serviceBus dll があります (サービス バス コードはライブラリ プロジェクトに存在するため、これは間接参照として追加されます)。

GAC にはサービスバス アセンブリが含まれていません。私のプロジェクトはすべてサービスバス dll の v2 を参照しており、CopyLocal に設定されています。

4

3 に答える 3

2

Azure ServiceBus Nuget パッケージをバージョン 2.1 に更新すると、この問題は便利に解消されました。

于 2013-07-03T12:53:25.557 に答える
-1

あなたのプロジェクトにはDLL、またはその正しいバージョンがないようです。アプリケーションをビルドし、/bin フォルダーを調べます。DLL (Microsoft.ServiceBus.dll) が見つかった場合は、バージョンを確認し、一致していることを確認します (Version=2.0.0.0)。見つからない場合は、グローバル アセンブリ キャッシュにある可能性があります。

これで問題が解決しない場合は、次を試してください。 1. DLL が出力ディレクトリにコピーされるように、参照プロパティで copylocal = true を設定します。2. nuget パッケージ マネージャーを使用して、Microsoft.Servicebus dll にリンクします。通常、多くの同様の問題を解決します。

于 2013-06-23T17:32:51.683 に答える
-1

これをデバッグするために、GAC に Microsoft.ServiceBus.dll があるかどうかをローカル マシンで確認できますか? また、そのバージョンがプロジェクトで参照したものと異なるかどうかも確認してください。

于 2013-06-21T19:18:36.777 に答える