このT4 テンプレートを使用して EF4 Code First 用に事前に生成されたビューは、ビルド サーバーでは機能しません。ビルド サーバーでビューを再生成するのではなく、MSTest をコンパイルして実行するだけです。テストの実行時にエラーがスローされます。
System.Data.MappingException: EntityContainer 'DB' のマッピングおよびメタデータ情報が、事前生成されたビューの作成に使用された情報と一致しなくなりました
別のマシンで同じテンプレートを実行しましたが、ハッシュ値が異なります。これがビルドサーバーで機能しない理由だと思います。他のマシンでは実行時にハッシュ値が異なるため、検証が失敗し、例外がスローされます。
私は使用しています:
- VS 2010 プロ
- .Net フレームワーク v4.0.30319
- エンティティ フレームワーク v4.2 (コード ファースト)
- EF CodeFirst View Generation T4 Template for C# (v1.0.1) - GetEdmxSchemaVersion をわずかに変更して、セットアップの正しい EntityFrameworkVersions バージョンを返します。
- クラス ライブラリ プロジェクト テンプレートの使用
私が実行しているテストは、コードでチェックインされている SQL DB ファイルに接続します。
ビルド サーバーと、同じ EF dll バージョンと .Net Framework バージョンを使用していることを確認しました。
ハッシュ値が異なる理由は何ですか?
更新: EdmxWriter.WriteEdmx() を使用して、2 つの開発マシンから 2 つの XML ファイルを生成して比較しました。
スキーマのバージョンは次のとおりです (両方のマシンで同じ)。
<?xml version="1.0" encoding="utf-8"?>
<Edmx Version="2.0" xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
明らかな違いは、XML ファイル内のいくつかのノードの順序です。次に例を示します。
マシン 1:
<EntityType Name="PersonEntity" BaseType="Self.Entity" />
<EntityType Name="CompanyEntity" BaseType="Self.Entity" />
マシン 2:
<EntityType Name="CompanyEntity" BaseType="Self.Entity" />
<EntityType Name="PersonEntity" BaseType="Self.Entity" />
なぜそれらが異なる順序になっているのか分かりますか?
更新 2: ビルド サーバーからの Edmx (xml) は、他の 2 つの開発マシンでも異なります。ここでも、一部のノードの順序が異なります。
マシン 1 とビルド サーバーの両方に System.Data.Entity.dll (同じファイルと製品バージョン -- v4.0.30319.1 ) が %windir%\Microsoft.NET\assembly\GAC_MSIL\System.Data.Entity\v4.0_4 にあります。 .0.0.0__b77a5c561934e089.
更新 3: System.Data.Entity.Design.dll のバージョンも確認しました。T4 テンプレートは、このアセンブリを参照します。マシン 1 には、この dll の 2 つのコピーがあります... GAC (v4.0.30319.233) と C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0 (v4.0.30319.1) にあります。 . これは、ビルド サーバーとマシン 2 にも当てはまります。ランタイム中のハッシュ検証関数が、プロジェクトで参照されていないため、この dll を使用しているのだろうかと思います。使用されている場合は、どのバージョンが使用されているか。しかし、再び、マシン 1 でハッシュ検証が成功します。