10

T4 テンプレートでポータブル クラス ライブラリを使用する Windows ストア アプリケーションがあります。変換を実行すると、次のエラーで失敗します。

Compiling transformation: The type 'System.Object' is defined in an assembly 
that is not referenced. You must add a reference to assembly 'System.Runtime,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

System.Runtime ライブラリへの参照を手動で追加しようとしましたが、「コンポーネントはビルド システムによって既に自動的に参照されています」というメッセージが表示されました。

同じライブラリが、Silverlight プロジェクトでも Windows Phone プロジェクトでも機能します。

どこに問題があるのか​​ 誰にも分かりますか?

Windows ストア アプリケーションの開発は初めてなので、些細なエラーかもしれませんが、解決策が見つかりません。

4

2 に答える 2

4

概要:

この正確な問題を解決するには、T4 テンプレートの先頭に次を追加するだけです。

<#@ assembly name="System.Runtime" #>

長い答え:

T4 テンプレートはコンパイル時の概念であるため、ホスト プロジェクトのコンテキストではなく、ビルド スタック (.NET Framework 4.5 など) のコンテキストとフレームワークで実行されるため、Store プロジェクトを変更して System.ランタイムは役に立ちません。

代わりに、テンプレート自体を介して参照について T4 に伝える必要があります。これは通常、MSBuild を使用するツールでは自動的に処理されますが、T4 は基本的にコンパイラを直接呼び出すため、移植可能な参照アセンブリごとに手動で通知する必要があります。

ポータブル ライブラリで実際のコードを書き始めると、さらに多くの参照を追加する必要があることがすぐにわかります。基本的に、%PROGRAMFILES(x86)%\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\Facades の下のすべてのアセンブリ。多くのテンプレートでこれを行う場合は、上記のフォルダー内のすべてのファイルのアセンブリ ディレクティブを含む単一のインクルード テンプレートを作成することをお勧めします。

于 2013-07-30T20:50:02.477 に答える
1

私の場合 (Xamarin Studio) では、解決策はクリーン ビルドを行うことでした。

于 2014-03-11T03:00:15.997 に答える