2012-02-14 11 views
1

私のWebおよびワーカーの役割では、コアフレームワークDLLの代替バージョンを参照しています。ファイルはCopy Localとマークされています。 Visual Studioはプロジェクト参照として正しいバージョンを表示します。プロジェクトをコンパイルするときには、binディレクトリにも正しいバージョンが含まれています。Azureパッケージに不正なDLLが含まれています

しかしAzureパッケージを作成するようにVisual Studioに依頼すると、パッケージ(およびパッケージ化中に作成されたcsxフォルダ)には、ワーカーロール専用の間違った(元の)DLLが含まれます。 Webロールには正しいDLLがあります。これは私が手動でcspackを使用した場合には発生しませんが、これはパッケージ化するのに望ましい方法ではありません。

Visual Studioで正しい参照DLLを使用してコンパイルできますが、間違ったDLLをバンドルする可能性がありますか?そのように

Copying file from "C:\Users\bytenik\Dropbox\Treadmarks\lib\EntityFramework\System.Data.Entity.dll" to "C:\Users\bytenik\Dropbox\Treadmarks\src\Azure\obj\Debug\Worker\System.Data.Entity.dll". 
Copying file from "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll" to "C:\Users\bytenik\Dropbox\Treadmarks\src\Azure\obj\Debug\Worker\System.Data.Entity.dll". 

、私の参照をコピーしているようだし、それをコピー:

追加情報: 私は代わりのVisual Studioのパッケージングを行うためにmsbuildを実行すると、私は次の2行を参照してくださいシステム参照を使用します。

注:私は、.NET CLR DLLを置き換えるの全体のコンセプトは、巨大なハックであることを十分承知しています。 .NET 4.5が必要な機能をサポートするようになると、これはすべて削除されます。その間、私は開発を続けることができる必要があります。

Azure References Incorrect DLL」は実際には間違っていて、有効であったが、私の問題を解決できなかった回答につながっています。

+0

を参照してください。ありがとう。 – Kev

+0

@Kev私はそれについて考えましたが、答えのすべては意味をなさないでしょう。 –

答えて

1

GACにあるアセンブリのローカルおよび/または変更されたコピーへの参照がある場合でも、コンパイル中に使用されますが、実行時にCLRは常にアセンブリを読み込みますあなたのアプリケーションと同じディレクトリにそのGACが座っていても、GACから削除されます。

解決策は、変更されたアセンブリをパックまたは展開する巧妙な方法を考えずに、CLRを実際にロードする方法を考え出すことです。

2つの解決策:

1)本番サーバのGACにアセンブリの修正版を展開する役割スタートアップタスクとインストールプロジェクトを使用してください。

2)アセンブリの署名を削除し、署名なしですべての参照がこのバージョンに行われていることを確認します。オリジナルの署名付きバージョンを参照しているかもしれない他のアセンブリを注意し、GACからロードしようとします。詳細およびリンクについては

それは再書き込み元の質問にもっと良かったはず今後の参考のためにHow to prevent a .NET application to use an assembly from the GAC?

関連する問題