17

4 つのプロジェクトを含む Azure ソリューションがあります。(Windows 8 上の VS 2012、Azure Tools 1.8)

  1. 共通コードのコア プロジェクト
  2. Web ロール フロント エンド
  3. データを処理するためのサービス ロール (SQL Azure DB から)
  4. スケジュールされたタスクの Worker ロール

すべてのロール プロジェクトには、copy local = true... 標準のものを使用してコア プロジェクトへの参照があります。

Web ロールとワーカー ロールは正常に動作しますが、サービス ロールは初期化 - 開始 - リサイクル ループでスタックし続けます。サービスを参照すると、Could note load file or assembly FileNotFoundException. 案の定、サーバーへの RDP と DLL がありません。

パッケージ ファイルをローカルで確認すると、他のロールには欠落している DLL が含まれていますが、サービス ロールは含まれていません。

VS を使用して (Azure パブリッシュではなく) サービス ロールをローカル ファイル システムに発行すると、コア DLL含まれ、VS 設定がコピー ローカルに対して正しいことが証明されます。

VS 内から、Azure 展開パッケージに追加されるファイルに影響を与える他の方法はありますか? または、VS を使用せずにパッケージの作成をスクリプト化する簡単な方法はありますか?

4

2 に答える 2

18

コメントで書いたように、私はあなたと同じ状況にあります (Windows 7 および 8、VS 2012、Azure SDK 1.8)。Copy Localはtrueに設定されていますが、* .cspkgパッケージを開くと、参照されているアセンブリがapprootフォルダーにありません。私がしたこと 新しい Worker Role プロジェクトを作成し、古いプロジェクトからコードをコピーしました。これで、すべてのアセンブリが含まれます。

更新:上記の解決策は、私の場合は実際には必要ありませんでした。私の本当の問題は、Web ロールが誤って Worker Role アセンブリを参照していたことです。この不要な参照を削除すると、ワーカー ロールはパッケージ内のすべてのアセンブリを取得しました。私の意見では、この動作はバグです。

于 2013-02-07T10:40:47.307 に答える
2

アントンが「UPDATE」で始まる段落の回答で説明していることを確認できます。

「Utils」、「WorkerRole」、および「WebRole」プロジェクトと呼ばれるクラス ライブラリ プロジェクトがありました。WorkerRole と WebRole の両方が Utils を参照していました。さらに、WebRole は WorkerRole を参照していました。後者には Service Bus メッセージとして使用されるいくつかのクラスが含まれていたためです。

その結果、クラウド サービスの .cspkg ファイルに Utils.dll が含まれず、Visual Studio にエラー メッセージが表示されませんでした。メッセージ クラスをプロジェクト Utils に配置し、参照 WebRole->WorkerRole を削除すると、すべてが再び正常になりました。

確かにバグのようです。

于 2013-09-14T22:47:20.510 に答える