标签: t4

无法让T4MVC与VS2010和ASP.NET MVC 2一起使用

我正在尝试将T4MVC模板添加到我的项目中,但我遇到了一些问题.我去了Codeplex上,并下载最新版本的T4MVC的,并根据指示,我刚才复制的两个文件T4MVC.tt,并T4MVC.Settings.t4到我的web应用程序的根目录.

我立刻得到了以下错误:

T4MVC.cs(生成的文件):

命名空间不能直接包含字段或方法等成员

T4MVC.tt(代码生成模板):

编译转换:找不到类型或命名空间名称'ITextTemplatingEngineHost'(您是否缺少using指令或程序集引用?)

当我打开时T4MVC.cs,它只包含一行:

ErrorGeneratingCode
Run Code Online (Sandbox Code Playgroud)

我发现这篇文章建议再次构建,但该解决方案并不能解决我的问题 - 事实上,它并没有改变一件事.我该怎么办?

asp.net-mvc t4 visual-studio-2010 t4mvc

8
推荐指数
1
解决办法
5862
查看次数

T4模板和运行时参数

我正在VS 2010中构建一个插件,我陷入了T4代.现在我已经实现了(像MSDN建议的)一个自定义T4主机来生成我的T4结果,我以这种方式使用它:

        const string content = @"c:\Simple.tt";
        var engine = new Engine();
        var host = new MyTemplateHost();            
        var result = engine.ProcessTemplate(File.ReadAllText(content), host);
        foreach (CompilerError error in host.Errors)
        {
            Console.WriteLine(error.ErrorText);
        }
Run Code Online (Sandbox Code Playgroud)

这有效,直到我在模板中传递参数.一旦我在.tt文件中创建了一个参数,主机就会说它不知道如何解决它.我看到你可以使用TemplateSession来做到这一点,但我没弄明白如何将它传递给我的主机?是否有更好的方法使用C#从.tt生成代码并在运行时传递参数?也许我走错了路.

c# t4 template-engine visual-studio-2010

8
推荐指数
3
解决办法
1万
查看次数

如何从PowerShell脚本触发T4模板

在我的VS2010解决方案,我已经根据T4Scaffolding的NuGet设置PowerShell脚本和T4模板的,一切工作脚手架罚款及相关T4的,但在我的剧本之一,我需要触发位于另一个项目T4模板.

这个有什么简单的Powershel cmdlet吗?只运行模板而不传递任何参数或值.

谢谢.

powershell t4 code-generation visual-studio-2010

8
推荐指数
1
解决办法
2780
查看次数

在构建服务器上运行TextTransform.exe(T4)

我正在尝试设置一个进程,我的T4模板将在构建服务器上进行转换(Visual Studio未安装在那里).

我已经阅读了所有在线参考文献,但无法获得显示如何执行此操作的明确来源.

具体来说,这是我遇到的两个问题:

  • TextTransform.exe抛出有关缺少DLL的错误:

C:\ TeamCity的\ buildAgent \工作\ AppSettings.tt(0,0):错误CS0006:编译转型:元数据文件"Microsoft.VisualStudio.TextTemplating.Interfaces.10.0,版本= 10.0.0.0,文化=中立,公钥= b03f5f7f11d50a3a '无法找到

使用gacutil注册DLL文件修复了这个问题,虽然我想避免这一步.

  • 在Visual Studio外部运行时,使用Host.ResolvePath(string)方法不返回任何值.

此方法有助于确定模板用作其数据源的.txt文件的完整路径.没有它,无法在构建服务器上找到此文件.

任何帮助将在运行中受到赞赏.

编辑:打开一个MS CONNECT问题:https://connect.microsoft.com/VisualStudio/feedback/details/744137/texttransform-exe-does-not-work-without-vs2010-installed

参考资料我检查过:

.net c# t4 code-generation visual-studio-2010

8
推荐指数
1
解决办法
5239
查看次数

如何在T4模板中获取枚举类型

在编写T4文本模板的过程中,我遇到了一个我正在努力解决的问题.我需要知道我正在处理的枚举的类型.

我有基于byte和的枚举ushort.我需要T4文本模板来编写代码以将枚举转换为正确的值类型,以便序列化枚举并将其放入字节数组中.

这是byte类型的示例枚举

namespace CodeEnumType
{
    public enum MyEnum : byte
    {
        Member1 = 0,
        Member2 = 1,
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的T4文本模板

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="EnvDte" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="System.Collections.Generic" #>
<#
var serviceProvider = this.Host as IServiceProvider;
var dte = serviceProvider.GetService(typeof(DTE)) as DTE;
var project = dte.Solution.FindProjectItem(this.Host.TemplateFile).ContainingProject as Project;
var projectItems = GetProjectItemsRecursively(project.ProjectItems);
foreach(var projectItem in projectItems)
{
    var fileCodeModel = projectItem.FileCodeModel;
    if(fileCodeModel == …
Run Code Online (Sandbox Code Playgroud)

c# t4 enums envdte

8
推荐指数
1
解决办法
836
查看次数

System.IO.FileNotFoundException:无法加载文件或程序集System.Runtime,Version = 4.1.0.0

我正在使用.Net Core 1.1
我想在Visual Studio 2017 15.1中使用T4生成一些代码

MultipleOutputHelper.ttinclude:

<#@ assembly name="System.Core"#>
<#@ assembly name="System.Data.Linq"#>
<#@ assembly name="EnvDTE"#>
<#@ assembly name="System.Xml"#>
<#@ assembly name="System.Xml.Linq"#>
<#@ import namespace="System.Collections.Generic"#>
<#@ import namespace="System.IO"#>
<#@ import namespace="System.Text"#>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating"#>
<#+
// https://github.com/damieng/DamienGKit/tree/master/T4/MultipleOutputHelper
// http://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited

// Manager class records the various blocks so it can split them up
class Manager {
    private class Block {
        public string Name;
        public int Start, Length;
        public bool IncludeInDefault;
    }

    private Block currentBlock;
    private readonly …
Run Code Online (Sandbox Code Playgroud)

c# t4 .net-core

8
推荐指数
0
解决办法
1155
查看次数

T4入门

我想开始编写T4模板.我听说过很多关于这些模板的东西(主要是在Hanselminutes播客中),并且想了解更多.有关T4模板编写信息的最佳位置是什么?开始实现自己的模板需要什么?我应该知道是否存在陷阱或重要事项?

t4

7
推荐指数
1
解决办法
1733
查看次数

如何在T4文本模板中使用自定义库/项目?

我看,我没有看到.

我有一个包含两个项目的解决方案 - 项目A(库)和项目B,它是主项目,包含T4文本模板.

到目前为止我做了什么 - 我在主项目中添加了一个项目A的引用.我在模板中包含了这样的行:

<#@ import namespace="MyProjectA" #>
Run Code Online (Sandbox Code Playgroud)

然而,仍然存在错误"编译转换:找不到类型或命名空间名称'MyProjectA'(您是否缺少using指令或程序集引用?)"

问题:如何从文本模板引用项目A?

请注意:我想在解决方案中引用一个项目,而不是磁盘上的dll文件.

c# t4 reference

7
推荐指数
2
解决办法
5302
查看次数

如何从现有数据库生成POCO代理

我最近切换到Entity Framework 5.现在,我想从现有数据库生成POCO类,我还需要延迟加载和更改跟踪.因此,所有标量属性都应该是虚拟的以及导航属性.

添加新的ADO.Net实体数据模型以.edmx文件和其他一些.cs和.tt文件结尾.

首先,我想知道为什么生成的POCO类默认不符合变更跟踪代理的要求,即标量属性不是虚拟的.

其次,如何生成支持代理的poco类?

PS:我接受了Slauma的答案是迄今为止最好和唯一的答案,但我不同意它的第一部分.这是我的论点

Slauma讨论了代理的两个问题:限制和性能:

  • 关于启用代理的实体的限制:当实体框架在DB First方法中生成类时,类必须遵循以启用更改跟踪代理的规则并不是那么重要,因为它们根本不是限制性的.谁真正关心导航集是IList还是HashSet?只有当应用程序中存在perior设计类并且要从中生成表时,才能理解这些限制.

  • DB首先不支持复杂属性.所以我们可以将它们从讨论中排除.

  • 关于性能:在所讨论的文章以及我迄今为止研究的其他一些实验中,结果并不是非常有说服力地拒绝代理以支持快照.首先,实验是在大量实体(即10,000)上完成的.应用程序(不在数据库中)中的批处理过程对大量实体起作用并不是不可能的,但是假设有更好的方法,例如存储过程.其次,根据应用程序的类型和需求,我们通常会处理少量的entites,例如当Repository模式被强制使用时; 代理和快照的性能没有区别.有趣的是,在已解决的实验中,重新为属性重新分配相同的值是代理性能显着失败的唯一情况.但谁真的这样做?小心避免反复通知更改跟踪器非常容易.同样,在这种情况下,当处理大量的entites时会出现重大问题.

t4 poco entity-framework-5

7
推荐指数
1
解决办法
1579
查看次数

从T4模板调用同一项目中的类

我正在尝试为CRUD类创建一些脚手架,并希望使用T4来帮助构建这些类.我刚刚开始并且在调用一个住在同一个项目中的类时遇到了问题.例如:

<#@ import namespace="System.Collections.Generic" #>
<#@ template    language="C#"   #>
<#@ output      extension=".cs" #>
<#@ include file="T4Toolbox.tt" #>

using System;
using System.Data;
using System.Data.Linq;
using System.Collections.Generic;

namespace TTFileGenerator
{
<#var entityName = "TEST";#>
    public class <#=entityName#>
    {
    <#
            MyClass myClass = new MyClass();
            List<string> something = myClass.GetSomething()
            ...
    #>
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

编译转换:找不到类型或命名空间名称"MyClass"(您是否缺少using指令或程序集引用?)

它是同一个项目中的公共类.我可以从项目中的其他类访问它而不是T4文件.还是一个T4新手.任何方向将不胜感激.

.net c# t4

7
推荐指数
1
解决办法
3261
查看次数