标签: t4

T4模板从数据库模式为每个表创建*multiple*html(例如)输出文件

我想使用一些T4模板来生成从sql server(在本例中)派生的数据库模式的html文件.对于数据库中的每个表,我想创建2个文件:

  1. tableName_List.aspx - 将包含在asp.net GridView中显示的相应html,并为每个db表列定义一个网格

  2. tableName_Edit.aspx - 将包含在asp.net FormView中显示的相应html ,每个db表列都有一个文本框(为简单起见,现在)

所以,如果我在数据库中有5个表,我会得到10个文件输出.我一直在谷歌上搜索并找到相关文章,但大多数似乎都没有解决这个问题.我也看到了使用亚音速的参考,但我宁愿不再引入另一种技术.

t4

10
推荐指数
2
解决办法
7071
查看次数

如何使用T4在相对路径上打开文件?

我正在尝试运行一个打开XML文件的T4模板,并使用它来生成代码工件.但是,当我尝试运行类似于下面的T4模板时,我收到一条错误消息

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Xml.dll" #>
<#@ assembly name="System.Xml.Linq.dll" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Xml.Linq" #>
<#@ output extension=".cs" #>
namespace ConsoleApplication1
{
<# XElement fragment = XElement.Load("data.xml"); #>
...
Run Code Online (Sandbox Code Playgroud)

Visual Studio 2010错误列表显示以下消息

Running transformation: System.IO.FileNotFoundException: Could not find file 'C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\data.xml'.

It is trying to open the file on the path where the TextTemplateFileGenerator custom tool runs. I'd like it to open the file relative …

t4 visual-studio-2010

10
推荐指数
1
解决办法
4941
查看次数

通过T4代码生成自动INotifyPropertyChanged实现?

我正在设置我的新项目,并且想知道如何实现我的ViewModel类确实具有INotifyPropertyChanged支持,而不必亲自手动编码所有属性.

我查看了AOP框架,但我认为他们只会用另一个依赖项炸毁我的项目.

所以我考虑用T4生成属性实现.

设置是这样的:我有一个ViewModel类,它只声明它的Properties背景变量,然后我用T4从它生成Property Implementations.

例如,这将是我的ViewModel:

public partial class ViewModel
{
    private string p_SomeProperty;
}
Run Code Online (Sandbox Code Playgroud)

然后T4将遍历源文件并查找名为"p_"的成员声明并生成如下文件:

public partial class ViewModel
{
    public string SomeProperty
    {
        get
        {
            return p_SomeProperty;
        }
        set
        {
            p_SomeProperty= value;
            NotifyPropertyChanged("SomeProperty");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法有一些优点,但我不确定它是否真的有效.所以我想在StackOverflow上发布我的想法作为一个问题,以获得一些反馈,也许一些建议如何更好/更容易/更安全.

c# t4 inotifypropertychanged

10
推荐指数
1
解决办法
4119
查看次数

在View T4模板中获取控制器名称

我有一个类似于这里描述的问题:MVC T4 MvcTextTemplateHost和自定义"控制器"T4模板,但希望,更简单.

我有一个用于ASP.NET MVC项目的自定义视图模板(View.tt,Create.tt).我无法弄清楚如何在这些视图模板中获取控制器名称.mvcHost.ControllerName和mvcHost.ControllerRootName在视图模板中都为空.但是,管道控制器名称中的某个位置已知的,因为视图是在ControllerName文件夹中创建的.我想在模板本身中引用它.

具体来说,我想生成HTML.ActionLink("Edit", MVC.<controllername>.Edit(id))而不是HTML.ActionLink("Edit", "Edit", new {id = item.id})

是否可以在View模板中获取控制器的名称?

asp.net-mvc t4 visual-studio-2010

10
推荐指数
2
解决办法
3786
查看次数

T4模板汇编指令

我有一个自定义的dll,里面有一个类,并且(为了简单起见),它上面有一个返回字符串的方法.

我有一个引用所述dll的项目,我想在该项目中使用一个(未预处理的)T4模板,该模板调用所述方法.我试过这个:

<#@ template debug="true" hostspecific="false" language="C#" #>
<#@ assembly name="MyDLL.dll" #>
<#@ output extension=".cs" #>
<#
    var template = new MyDLL.MyNamespace.MyClass();
        this.Write(template.Run());
#>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误14编译转换:找不到元数据文件"MyDLL.dll"
错误13命名空间不能直接包含字段或方法等成员

即使MyClass.Run()只是一个 return "//hello";

.net c# t4 visual-studio-2010

10
推荐指数
2
解决办法
7210
查看次数

T4包含项目根目录中的文件路径

如何将项目相对包含在项目根目录中?有点像<# @include file="~/Infrastructure/Manager.ttinclude" #>

.net t4

10
推荐指数
1
解决办法
3024
查看次数

使用T4和C#在运行时编译动态代码

我一直在使用TextTemplatingFilePreprocessor上T4阅读文章展示了如何动态地生成成为项目的一部分,并与该项目编译的代码.

是否可以使用T4生成在运行时编译,输出到DLL并加载和执行的代码,所述代码可以访问与dll相关的常用可见性功能?

如果是的话,请你指点一个例子.

我有效地尝试使用IL生成动态dll,而不是使用C#.

编辑

我需要的具体案例很简单.我正在编写一个消息路由器,用于将消息路由到服务.服务可以是本地的或远程的.声明性脚本编译为C#.动态部分是"这项服务是本地还是远程服务?".输出C#相应地改变.本地/远程的路由风格不同,因此具有动态特性.

这是我需要的一个例子.

.net c# t4 code-generation

10
推荐指数
1
解决办法
4530
查看次数

生成枚举的JavaScript表示

我的[Flags]代码中有一些枚举我想要暴露给JavaScript而不需要复制和粘贴.SignalR似乎通过将URL映射到返回由反射生成的JavaScript存根的Action来为其Hub代理做类似的事情.由于代码是在运行时生成的,因此似乎无法将其包含在Bundles中.

作为替代方案,我在设计时实现了一个T4模板来生成一个js文件:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="EnvDte" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".js" #>
Enums = {
<#
    var visualStudio = (Host as IServiceProvider).GetService(typeof(EnvDTE.DTE))
                        as EnvDTE.DTE;
    var project = visualStudio.Solution.FindProjectItem(this.Host.TemplateFile)
                                        .ContainingProject as EnvDTE.Project;

    foreach(EnvDTE.ProjectItem item in GetProjectItemsRecursively(project.ProjectItems))
    {
        if (item.FileCodeModel == null) continue;
        foreach(EnvDTE.CodeElement elem in item.FileCodeModel.CodeElements)
        {
            if (elem.Kind == EnvDTE.vsCMElement.vsCMElementNamespace)
            {
                foreach (CodeElement innerElement …
Run Code Online (Sandbox Code Playgroud)

c# reflection t4 asp.net-mvc-4

10
推荐指数
1
解决办法
1438
查看次数

如何在VS2015上使用T4?(找不到Microsoft.TextTemplating.targets文件)

我刚刚第一次尝试使用Visual Studio 2015打开我的一个项目,它说:

未找到importede项目"C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets".确认<Import>声明中的路径是正确的,并且该文件存在于磁盘上.

这些文件确实不存在于磁盘上.我需要安装什么样的SDK才能在VS 2015中使用文本模板?

t4 visual-studio visual-studio-2015

10
推荐指数
1
解决办法
5052
查看次数

T4模板在新的VS2017 csproj项目中不生成输出

我将project.json/ .xprojproject 迁移到较新的CS2017 .csproj格式.

该项目包含一个T4(.tt)模板文件.

它不会在保存或构建时重新生成其输出.输出.cs文件也没有嵌套在.tt文件下面.

为了让这个工作,我有什么必须做的吗?

t4 csproj visual-studio-2017

10
推荐指数
1
解决办法
4913
查看次数