2009-04-24 55 views
7

在Visual Web Developer 2008速成亞音速ASP.NET MVC模板似乎並沒有與我添加了一個新的數據庫工作。我刪除了Chinook數據庫並創建了我自己的數據庫。我知道Models文件夾中的.tt文件用於生成代碼,但它們不會(儘管將ConnectionStringName更改爲我在web.config中設置的內容)Visual Web Developer中亞音速ASP.NET MVC樣品快速

右鍵單擊每個.tt文件並選擇「運行自定義工具」不會產生任何東西,除了一個錯誤信息:

Cannot find custom tool 'TextTemplatingFileGenerator' on this system. 

如果是,工具保存? CodeTemplates中有.tt文件,當您創建一個新的控制器或視圖時使用這些文件,所以我假設有一個工具可以執行此操作。

+0

T4模板是否適用於常規的MVC項目?我在想,t4模板可能沒有安裝express? – jfar 2009-04-24 17:11:50

回答

10

跟着Adam's評論,你可以在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文件\微軟 共享\ TextTemplating \ 1.2 \ TextTransform.exe
  • 參數: $(PROJECTDIR)\型號\ Classes.tt
  • 初始目錄: $(PROJECTDIR)
  • 使用輸出窗口提示參數應該被檢查。

單擊確定,然後從工具 - >外部工具菜單中執行新創建的工具。

4

事實證明,我不知道這一點,T4模板只能運行在VS標準或更好:(我曾以爲它是一次可用VS SDK - 也許你可以找到它在那裏:(

2

有一個命令行TextTransform工具,你可以使用:

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

默認情況下,在快速的版本它安裝到C:\ Program Files文件\ Common Files文件\微軟共享\ TextTemplating \ 1.2

然而,MVC模板需要在Visual Studio中運行t4模板,所以我很肯定沒有至少一個模板的補丁,你不能讓它們工作。

+0

雖然不支持Visual Studio 2008速成版(根據系統要求) – SamWM 2009-04-29 08:41:02

+0

是的,安裝程序會阻止您在沒有Standard或更高版本的情況下繼續操作。然而,我只是下載並安裝Express,並將TextTransform命令行工具添加到以下路徑: C:\ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2 所以希望你能夠在沒有SDK的情況下完成。 – 2009-04-30 17:33:11