この投稿には、Visual Studio SDKとVisual Studio 2010のモデリングとVisualization SDKインストールのソリューションを使用してGet Visual Studio to run a T4 Template on every buildがあります。「T4変換中にホストからDTEを取得できませんでした」
...しかし、私は解決できないエラーが発生します:
エラー2実行中の変換:System.ArgumentNullException:値をnullにすることはできません。 パラメータ名:マイクロソフトでMicrosoft.VisualStudio.TextTemplatingE035559D977B9B9858AB2036321BC47D.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.Create(オブジェクトtextTransformation) でMicrosoft.VisualStudio.TextTemplatingE035559D977B9B9858AB2036321BC47D.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.VsEntityFrameworkTemplateFileManager..ctor(オブジェクトtextTemplating) でホスト からDTEを取得できませんでした.VisualStudio.TextTemplatingE035559D977B9B9858AB2036321BC47D.GeneratedTextTransformation.TransformText()Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSessionセッション、Stringソース、ITextTemplatingEngineHostホスト、文字列&結果)。ライン= 0、列= 0 ApmWeb.Web.Client私のスクリプトの最初の部分に続いて
...
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#><#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"../../ApmWeb.Infrastructure.Data/Model/ApmWebModel.edmx";
MetadataWorkspace metadataWorkspace = null;
bool allMetadataLoaded =loader.TryLoadAllMetadata(inputFile, out metadataWorkspace);
EdmItemCollection ItemCollection =
(EdmItemCollection)metadataWorkspace.GetItemCollection(DataSpace.CSpace);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager =
EntityFrameworkTemplateFileManager.Create(this);
UPDATE は、私はこの問題は、「EF.Utilityにあることがわかりました.CS.ttinclude "...
dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE));
if (dte == null)
{
throw new ArgumentNullException("Could not obtain DTE from host");
}
私の考えは、VSホスト外で変換を実行するとDTEオブジェクトを取得できないということです。このエラーは、たとえばチームビルド内で変換を実行しているときに発生します(MSBuildホストはDTEオブジェクトを認識しません)。実際にはVSから「カスタムツールを実行」を使用して動作しますが、前の記事で説明したようにオートマチックT4ビルドを設定すると機能しません。
どのように解決できますか? EF.Utility.CS.ttincludeのバグですか?
UPDATEすべての作品(EF.Utility.CS.ttincludeでPREPROCESSED_TEMPLATEを定義する)が、私は、例えば失うDTEを使用して、VSとの相互作用を削除 生成されたファイルを私のプロジェクトに追加する機能...それを動作させる別の方法はありますか?
使用できるアプローチの1つは、生成されたコードを組み込むようにプロジェクトファイルを変更して、ワイルドカードを使用することです。 – GarethJ
この問題は解決しましたか、回避策がありますか?私はそれに走っている.... – devlife