1

クラス ライブラリ コードを .NET 3.5 と Silverlight 3 の間で共有することを考えています。

私は主に .NET 向けに開発しているので、対応する .NET プロジェクト ファイルから Silverlight プロジェクト ファイルを自動生成することを考えています。

したがって、Silverlight で次のエラー メッセージを表示する T4 ファイルがあります。

エラー 1 コンパイル変換: 型または名前空間名 'CompilerError' が名前空間 'System.CodeDom.Compiler' に存在しません (アセンブリ参照がありませんか?)

エラー 2 変換のコンパイル: 型 'System.CodeDom.Compiler.CompilerErrorCollection' は、参照されていないアセンブリで定義されています。アセンブリ 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' への参照を追加する必要があります。

エラー 3 コンパイル変換: 'System.CodeDom.Compiler.CompilerErrorCollection' には 'Add' の定義が含まれておらず、タイプ 'System.CodeDom.Compiler.CompilerErrorCollection' の最初の引数を受け入れる拡張メソッド 'Add' が見つかりませんでした (あるusing ディレクティブまたはアセンブリ参照がありませんか?)

私の強調は、System.dll への参照が欠落していることを示しています。

次の行を追加すると:

<#@ assembly name="System" #>

次に、.NET プロジェクトは次のように不平を言います。

エラー 1 変換のコンパイル: 同じ ID 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' を持つアセンブリが既にインポートされています。重複する参照の 1 つを削除してみてください。

Silverlight プロジェクトをビルドするコードを変更して、生成された .cs ファイルのみを追加し、.tt ファイルを除外する必要があるようです。

または、両方のコンパイラを満足させるためにできることはありますか?

これは私の.TTファイルの始まりです:

<#@ template language="C#v3.5" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System" #>
<#@ output extension=".Designer.cs" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #>
4

1 に答える 1

2

T4 が Silverlight プロジェクトから動作することを確認する必要がある場合は、次の行を追加して、T4 ホストに正しい System.dll をロードするように要求することで、これを簡単に行うことができます。

<#@ assembly name="C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" #>

この詳細な投稿はこちらをご覧ください

http://msmvps.com/blogs/theproblemsolver/archive/2009/03/24/getting-t4-templates-to-work-with-silverlight.aspx

お役に立てれば

于 2010-01-12T06:11:55.707 に答える