在Visual Web Developer Express 2008中,SubSonic ASP.NET MVC模板似乎不适用于我添加的新数据库。我删除了Chinook数据库并创建了自己的数据库。我理解Models文件夹中的.tt文件用于生成代码,但它们没有(尽管将ConnectionStringName更改为我在web.config中设置的内容)
右键单击每个.tt文件并选择“运行自定义工具”不会生成任何内容,但错误消息除外:
Cannot find custom tool 'TextTemplatingFileGenerator' on this system.
该工具在哪里保存? CodeTemplates中有.tt文件,在创建新的控制器或视图时使用,因此我假设有一个工具可以执行此操作。
答案 0 :(得分:10)
继续Adam's评论后,您可以在VS Express中执行此操作,但是亚当建议的模板需要进行更改。
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工具(工具 - >外部工具): 设置这些属性:
单击“确定”,然后从“工具” - >“外部工具”菜单中执行新创建的工具。
答案 1 :(得分:4)
事实证明,我不知道这一点,T4模板只能在VS Standard上运行或更好:(。我曾经认为它曾经是VS SDK的推出 - 或许你可以找到它在那里:(
答案 2 :(得分:2)
您可以使用命令行TextTransform工具:
[http://msdn.microsoft.com/en-us/library/bb126461.aspx][1]
默认情况下,它安装在C:\ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2
中的Express版本中然而,MVC模板要求在Visual Studio中运行t4模板,所以我非常确定没有至少一个模板补丁,你将无法让它们工作。