我正在尝试在我的MVC项目中使用T4模板.这个截屏视频建议只需将MVC的现有T4模板复制到您的解决方案中并从那里开始.但是,当我尝试编译时,我收到此错误:
Error 1 Compiling transformation: The type or namespace name
'MvcTextTemplateHost' could not be found (are you missing a using directive
or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
我不知道这可能存在什么装配,谷歌对它没有多大帮助.有谁知道我应该参考什么组件?
使用T4代码生成,是否可以访问当前项目中定义的类型?
例如,如果我有一个接口,我想将其实现委托给另一个类,即
interface IDoSomething {
public void do_something();
}
class DoSomethingImpl : IDoSomething {
public void do_something() {
// implementation...
}
}
class SomeClass : IDoSomething {
IDoSomething m_doSomething = new DoSomethingImpl();
// forward calls to impl object
public void do_something() {
m_doSomething.do_something();
}
}
Run Code Online (Sandbox Code Playgroud)
我想SomeClass用代码生成自动化呼叫转发; 这可能吗?
我正在尝试在Visual Studio 2008中调试T4模板的执行.
我在Visual Studio 2008中调试T4模板时发现的所有信息都表示您可以在模板中设置断点(红点),就像它是常规代码文件一样.我安装了Clarius T4代码荧光笔,所以我的T4模板是彩色的,但我无法设置断点. 当我点击保证金时没有任何反应.
我已经尝试过Debugger.Break(),它启动了一个新的VS.NET实例,但它无法从我的模板加载代码.我收到一个对话框,上面写着"当前位置没有可用的源代码." 如果我在另一个实例中加载了相同的项目,如果我启动一个新实例,就会发生这种情况.
是什么赋予了?
我在过去的两年里一直在使用CodeSmith,并喜欢它为我做的事情.但是,我也知道T4内置于Visual Studio中,并且可以做一些很酷的东西.基于与VS2010中的朋友T4的对话,T4会更好.
所以问题是:我是否继续使用CodeSmith总线或是时候开始将我的所有模板转换为T4了?
更新 也许我对问题的解释方式并不清楚.显然,我不会删除我的cs模板并停止使用它们,直到我有新的模板工作.但是,在这一点上是否值得努力?T4在这一点上是否提供了优于CodeSmith的优势?是否有一些功能或一组功能,通过为T4编写我的模板,我会看到我的效率提高了100倍?
我在Visual Studio 2010中使用T4,我想在我的解决方案中迭代文件,但是我发现T4源代码生成在一种沙箱中,当前工作目录在Visual Studio 10目录中在程序文件中.
有没有办法相对地引用T4文件的解决方案,以便它不会破坏构建,或者在没有相同文件结构的其他人的框中工作?
谢谢
在实体框架T4模板中,我可以使用类CodeGenerationTools.
例如:
void WriteProperty(**CodeGenerationTools** code, EdmProperty edmProperty)
{
WriteProperty(Accessibility.ForProperty(edmProperty),
code.Escape(edmProperty.TypeUsage),
code.Escape(edmProperty),
code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
Run Code Online (Sandbox Code Playgroud)
但是,我找不到这个类的定义.
它来自哪个组件?它的成员是什么?
谢谢
我希望得到特定程序集中的所有类,这是我的代码
var assembly=Assembly.GetExecutingAssembly();
var assemblies = assembly.GetTypes().Where(t => String.Equals(t.Namespace, "RepoLib.Rts.Web.Plugins.Profiler.Models", StringComparison.Ordinal)).ToArray();
Run Code Online (Sandbox Code Playgroud)
当c#代码所有东西都没问题我得到我的程序集但是当写入t4文件我没有任何错误但我的程序集计数是.
我想在Visual Studio项目模板中有一个T4模板,但我不希望在添加项目后,"tt"文件出现在项目中.简而言之,我想生成.cs文件,然后完全丢弃.tt文件.将项目添加到项目时,代码生成仅发生一次.
我设法将.tt文件添加到项目模板中,但我看不出如何在代码生成后丢弃它.
谢谢Laurent
我正在尝试在Visual Studio 2015中运行新的T4模板.但是它无法在此行编译:
var message = $"Linked table '{linkedTable}' does not exist.";
Run Code Online (Sandbox Code Playgroud)
编译器报告'$'字符是意外的.但是,根据新的字符串插值功能指南,此语法应在C#v6中有效.
有没有办法让T4模板引擎使用较新的C#版本,而不是在外部库中编译我的代码?
更新:
以下是该文件的声明元素,作为参考:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".sql" #>
<#@ SqlModelDirective processor="SqlModelDirectiveProcessor" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.SqlServer.Dac" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Microsoft.SqlServer.Dac.Model" #>
Run Code Online (Sandbox Code Playgroud)
除了SqlModelDirective元素,我认为这是非常标准的.