2

CSharpCodeProvider を使用してオンザフライでコードを生成およびコンパイルするアプリケーションがあります。コンパイルされるコードは Entityframework を使用するため、Entityframework.dll への参照をコンパイラに渡します。アプリケーションと共に再配布する Entityframework.dll は、.net 4.0 用に構築されたものです。また、System.ComponenModel.DataAnnotations.dll への参照をコンパイラに渡します。これは、GAC で見つかった dll への参照です。

.net 4.0 でアプリケーションを実行すると、これらすべてが正常に機能します。ただし、.net 4.0 の Entityframework にあった一部の属性が .net 4.5 の System.ComponenModel.DataAnnotations に移動されたため、.net 4.5 で実行すると問題が発生します。したがって、次のようなエラーが発生します。

メッセージ = エラー (CS0246): 型または名前空間名 'Column' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?) - ファイル: c:\Generated\DataContext\0rs2sztj.2.cs:14 エラー(CS0433): タイプ 'System.ComponentModel.DataAnnotations.Schema.ColumnAttribute' は両方の 'c:\Users\Steven Segers\AppData\Local\Temp\Temporary ASP.NET Files\vs\69fafaea\17b01629\assembly\dl3 に存在します\95fc97d4\5bdae37d_7c05d101\EntityFramework.DLL' および 'c:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll' - ファイル: c :\Generated\DataContext\0rs2sztj.2.cs:14

私が見る限り、これには2つの方法があります。

  1. .net 4.0 の System.ComponenModel.DataAnnotations の参照アセンブリをコンパイラに渡します。ここでの問題は、この参照アセンブリがターゲット マシンに存在する必要があることです。これに対応するには、顧客にサーバーに Windows SDK をインストールするよう要求するか、参照アセンブリをアプリケーションと共に配布する必要があります。前者はかなり望ましくない要件だと思います。後者が許可されているかどうかはわかりません。
  2. ランタイム .net バージョンを対象とする Entityframework.dll をコンパイラに渡すようにしてください。これを達成するための最良の方法が何であるかはわかりません。
4

0 に答える 0