Tag: t4

以编程方式检索流畅配置而不实例化DbContext

我有一个DbContext派生类,其成员实体类是使用Fluent API配置的。 我想以编程方式检索这些配置和关系。 执行此操作的代码已经到位,我将其移植到T4模板以生成代码。 虽然大多数代码生成都使用reflection,但是流畅的配置需要实例化上下文类才能获得: ObjectContext的 EntityObjects EntityContainer相关 EntitySets 诸如此类 由于我们没有使用属性属性,因此reflection无济于事。 这在运行时可以正常工作,但在T4模板中实现DbContext会导致各种问题。 它有时会崩溃VS,产生奇怪的错误,产生循环依赖等。 如果我调试T4模板,它确实运行没有错误,但后台进程锁定包含DbContext类和实体的项目。 因此,每次实体发生变化时,我都必须重新启动VS三次,执行不同的步骤。 呸! 我想知道是否有办法检索实体元数据/配置而不实例化上下文类。 任何指导将不胜感激。

在T4模板中使用class

我需要能够在T4模板中使用一个类,这两个类都驻留在我的解决方案中。 我在Container.cs有一个名为Container的类。 在我的文本模板中,我希望能够访问Container类。 有关如何做到这一点的任何想法。 基本上是这样的:

如何在T4模板中使用resx资源文件

我无法弄清楚如何在(.tt)T4模板中包含资源文件(.resx)。 我到目前为止尝试了…导入名称空间 还包括class级

构建时T4转换的产品仅在下一个构建中使用

我有一个VS项目,其中包含: 在template.tt上运行TextTransform的预构建操作,以生成generated.cs generated.cs列为要编译的文件之一(即在项目文件列表中) 当我构建项目时,执行预构建操作,重新创建generated.cs ,但VS编译之前版本的generated.cs (我猜它在构建过程开始时加载到内存中)。 如何使构建使用新版本的generated.cs (即在预构建操作中生成的版本)? 如何强制构建订单? 请注意,文本转换输入是动态的,因此无法在设计时完成。

T4代码生成:当前项目中的访问类型

使用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(); } } 我想通过代码生成自动化SomeClass的呼叫转发; 这可能吗?

如何将任意文件的依赖项添加到T4模板?

我有一个T4模板,可以从xml文件生成类。 如何在xml文件和模板文件之间添加依赖关系,以便在修改xml文件时自动重新运行模板,而无需从上下文菜单中选择“运行自定义工具”?

你如何使用.netreflection与T4?

我有一个包含文本模板的ac #project。 我希望这个模板基于反映项目中的C#类来生成一些SQL。 如何使用T4访问当前项目的内容? 是否可能,如果是,可以使用Reflection,还是只访问必须解析的原始源? 提前致谢!

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

我可以从C#以编程方式使用T4吗?

我正在编写生成C#代码的软件。 主要是我使用StringTemplate和StringBuilder。 有没有办法直接从我的代码中使用T4模板?

如何使用Model First方法使用动态连接字符串,但仍然使用EDMX中的数据模型?

我使用EF 5使用Model First方法创建了一个EDMX,即我从一个空白设计师开始并模拟我的实体。 现在,我希望能够使用EDMX中定义的此模型,但提供运行时SQL Server连接字符串,而无需修改配置文件。 我知道如何将连接字符串传递给DbContext但问题是找到程序集中映射的元数据。 例如,我的EDMX在app.config中有这个连接字符串 我缺少的部分是”metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;” 我希望能够以编程方式创建一个DbContext传入SQL Server连接字符串,但“添加”元数据部分。 这就是我希望T4文件生成的内容…… public partial class MesSystemEntities : DbContext { public MesSystemEntities() : base(“name=MesSystemEntities”) { } public MesSystemEntities(string sqlServerConnectionString) : base(GetEfConnectionString(sqlServerConnectionString)) { } private string GetEfConnectionString(string sqlServerConnectionString) { // values added by T4 generation string format = “metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;;provider=System.Data.SqlClient;provider connection string=\”{0}\””; return String.Format(format, sqlServerConnectionString); } … } 我的问题是如何在T4生成文件中获取我需要的元数据来创建entity […]