7

Visual Web Developer Express 2008 では、追加した新しいデータベースで SubSonic ASP.NET MVC テンプレートが機能しないようです。Chinook データベースを削除して、独自のデータベースを作成しました。Models フォルダー内の .tt ファイルがコードの生成に使用されていることは理解していますが、そうではありません (ConnectionStringName を web.config で設定したものに変更しているにもかかわらず)。

各 .t​​t ファイルを右クリックして [Run Custom Tool] を選択しても、エラー メッセージ以外は何も生成されません。

Cannot find custom tool 'TextTemplatingFileGenerator' on this system.

そのツールはどこに保管されていますか?新しいコントローラーまたはビューを作成するときに使用される CodeTemplates に .tt ファイルがあるので、これを行うツールがあると思います。

4

3 に答える 3

10

Adam のコメントに従って、VS Express でこれを行うことができますが、Adam が提案したようにテンプレートに変更が必要です。

Visual Studio の要件は、アクティブなプロジェクトへのパスを取得するためにのみ使用され、その後、web.config ファイルと app_data パスを見つけるために使用されます。これらの値はプロジェクト内で一般的に知られているため、代替値をハードコーディングできます

_Settings.tt ファイルを次のように更新します。

...
const string ConnectionStringName="Chinook";
//Use this when not building inside visual studio standard or higher
//make sure to include the trailing backslash!
const string ProjectPathDefault="c:\\path\\to\\project\\";

...

public EnvDTE.Project GetCurrentProject()  {

        if (Host is IServiceProvider)
        {
            IServiceProvider hostServiceProvider = (IServiceProvider)Host;
            if (hostServiceProvider == null)
                throw new Exception("Host property returned unexpected value (null)");

            EnvDTE.DTE dte = (EnvDTE.DTE)hostServiceProvider.GetService(typeof(EnvDTE.DTE));
            if (dte == null)
                throw new Exception("Unable to retrieve EnvDTE.DTE");

            Array activeSolutionProjects = (Array)dte.ActiveSolutionProjects;
            if (activeSolutionProjects == null)
                throw new Exception("DTE.ActiveSolutionProjects returned null");

            EnvDTE.Project dteProject = (EnvDTE.Project)activeSolutionProjects.GetValue(0);
            if (dteProject == null)
                throw new Exception("DTE.ActiveSolutionProjects[0] returned null");

            return dteProject;
         }
         return null;
}

...

public string GetConfigPath(){
        EnvDTE.Project project = GetCurrentProject();
        if (project != null)
        {
            foreach(EnvDTE.ProjectItem item in project.ProjectItems)
            {
             // if it is the configuration, then open it up
             if(string.Compare(item.Name, "Web.config", true) == 0)
             {
              System.IO.FileInfo info =
                new System.IO.FileInfo(project.FullName);
                return info.Directory.FullName + "\\" + item.Name;
             }
            }
            return "";
        }
        else
        {
            return ProjectPathDefault+"web.config";
        }
    }

    public string GetDataDirectory(){
        EnvDTE.Project project=GetCurrentProject();
        if (project != null)
        {
            return System.IO.Path.GetDirectoryName(project.FileName)+"\\App_Data\\";
        }
        else
        {
            return ProjectPathDefault+"App_Data\\";
        }
    }
...

次に、VS 外部ツール機能を使用して T4 ツールをセットアップします ([ツール] -> [外部ツール]): 次のプロパティを設定します。

  • タイトル: T4
  • コマンド: C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.2\TextTransform.exe
  • 引数: $(ProjectDir)\Models\Classes.tt
  • 初期ディレクトリ: $(ProjectDir)
  • [出力ウィンドウを使用] と[引数のプロンプトを表示] をオンにする必要があります。

[OK] をクリックし、[ツール] -> [外部ツール] メニューから新しく作成したツールを実行します。

于 2009-06-17T23:03:06.660 に答える
4

T4テンプレートはVSStandard以上でのみ実行されることがわかりました:(。かつてはVSSDKで利用可能だったと思っていましたが、おそらくそこにあります: ((

于 2009-04-24T18:26:39.560 に答える
2

使用できるコマンドライン TextTransform ツールがあります。

[ http://msdn.microsoft.com/en-us/library/bb126461.aspx][1]

デフォルトでは、Express バージョンでは C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.2 にインストールされます。

ただし、MVC テンプレートでは t4 テンプレートを Visual Studio 内で実行する必要があるため、少なくともテンプレートにパッチを適用しないと、テンプレートを機能させることができないと確信しています。

于 2009-04-26T19:11:20.853 に答える