2011-07-14 4 views
2

私はT4 "変換のコンパイル:同じIDを持つアセンブリが既にインポートされています。重複する参照の1つを削除してみてください。

コンパイル変換で苦労してきた:同じIDを持つアセンブリは、「XXXX」は既にインポートされています。重複する参照の1つを削除してみてください。

設計時にT4を使用して、いくつかのコードを生成するときに、いくつかの異なる再利用可能なテンプレートを.ttincludeファイルとして保存し、いくつかの異なる "親"テンプレートで共有します。

私は(私自身ttincludeファイル内)の参照の一つ削除したとき、私はこれ、と代替切り替える:変換をコンパイル

を:型または名前空間名「YYY」が見つかりませんでした(あなたはusingディレクティブまたはアセンブリ参照がありませんか?)

サークルにはどのようなアイデアがありますか?

答えて

5

まあ、汚れた回避策が見つかりました。

誰かに助言があれば、もっと良い解決策やアプローチが好きですか?

私のプロセスを他の人に役立つものとして投稿する。例えばデバッグモードに私のテンプレートを入れて テンプレートが含まれるように、テンプレートディレクティブを使用し


  1. 生成されたファイル(複数可)を見て、オープンの%TEMP%をポップ

    <#@テンプレート言語= "C#" デバッグ= "true" を hostspecificは= "真" #>

  2. (最近 変更された)。

  3. 使用されなかったアセンブリ/クラスを検索しました。 「含まれる」テンプレートの両方に同じ参照があることが見つかりました。

    <#1 @ =ファイル "MyHelperTemplate.ttinclude" #>

    そして、次のとおりです

    <#1 @ = "EF.Utility.CS.ttinclude" #>

  4. が開かれたファイルを含めるを非カスタムインクルード用のインクルードフォルダは、 さんと競合しています

    ..\ Common7 \ IDE \拡張\マイクロソフト\ Entity Frameworkのツールに\テンプレート\は、その厄介な輸入

    <#1 @インポート名前空間= "EnvDTE" #>

  5. を取り出し、このファイルを開い

  6. が含まれていますと同じフォルダに新しい名前を保存し、この新しいバージョンを指すように参照を更新しました。

    <#@が "親" テンプレートにファイル= "EF.Utility.CS.Custom.ttinclude" #>

  7. 入れに必要な輸入品を含め、テンプレート "を含む" から削除します。私の場合はこれでした:>


<#1 @インポート名前空間= "EnvDTE" #は、今ではすべての罰金、問題、一切ノー重複輸入、および参照されるすべての必要なアセンブリを実行していません正しく

この問題を完全に否定する、T4コードの再利用を扱うもっと洗練された方法があることは間違いありません。私は最初テンプレートのヘルパーで独自のカスタムアセンブリをインポートしようとしましたが、カスタムクラスライブラリをビルドしようとしたときにロックされたdllの古典的な問題のように見えました。

VolatileAssembly Custom Directiveとこの解決策があり、普及していますが、私のかなり単純な必要性のために少し残酷に見えます。たぶん私にはもっと時間があります。

+0

あなたは「%Temp%を開く」という意味はどういう意味ですか?私もこれを理解してEnvDTEを利用しようとしていますが、テンプレートとEnvDTEの一般的なことはまだ少しです。 – William

+0

つまり、「C:\ Users \ [YourUserName] \ AppData \ Local \ Temp」のようなものを開くためのショートカットであるstart> type "%temp%"を入力してください。 – MemeDeveloper

関連する問題