0

残念ながら顧客のために.NET 2.0をターゲットにしなければならない、私が書いているプロジェクトでT4世代の使用をスムーズにしようとしていますが、FCL 4.0ライブラリの使用を避けることも、VSがそうする方法を見つけることもできないようです. 2.0 をターゲットとするアセンブリから 4.0 をターゲットとするアセンブリの型にアクセスさせてください。

アイデアは、T4Attribute使用するプロジェクトで部分型を装飾するために使用できる を宣言することです。次に、属性の詳細に従って、タイプの追加コードが T4 によって生成されます。例として、標準の破棄パターンのボイラープレート部分のほとんどは、1 行の属性装飾を使用するだけで型に追加できます。

これをサポートするために独自のカスタムを導出してTextTransformationいますが、VS2010 を使用しているため、VS2005/8 SDK をインストールできず、VS2010 のみをインストールできます。つまり、TextTransformation使用しているのは .NET 4.0 DLL (Microsoft.VisualStudio .TextTemplating.10.0)。そのため、属性は同じ DLL 内にあり、使用するプロジェクトからその DLL を参照しようとすると、両方が同じフレームワーク バージョンをターゲットにしている場合にのみ型が表示されます。プロジェクトが 2.0 でライブラリが 4.0 になるとすぐに、VS は参照された型または名前空間を見つけられなくなります。

アプリケーションが CLRv2 を起動して実行するため、v4 DLL (dynamicなどを使用する可能性がある) でコードを実行できないと考えていると思います。十分に公平ですが、実際には、ライブラリ内の型は、T4 テンプレートがプロジェクトをスキャンして、T4Attributeコードを生成するように指示するプロジェクトによって開発 PC でのみ表示されます。VS2010 の T4 エンジンは CLRv4 で実行されると想定しています。属性は、リリース ビルドにコンパイルされることさえありません。

私はまだこれについての学習曲線の底にいます。私はそれを間違っていますか、もっと簡単な方法はありますか?そうでない場合、私の問題を回避する方法はありますか? 間違った VS バージョンを使用しているにもかかわらず、どうにかして古い VisualStudio DLL を取得できますか?

4

1 に答える 1

2

2 つのアセンブリを作成します。最初に、.NET 2.0 をターゲットにして説明した T4Attribute を定義し、次に .NET 4.0 をターゲットにしてカスタム TextTransformation を定義します。これにより、製品コードとコード生成用の 2 番目のアセンブリの両方から最初のアセンブリを参照できます。

于 2013-01-04T02:28:29.453 に答える