T4生成的代码需要访问不同的命名空间/项目

时间:2014-03-05 17:59:58

标签: c# enums t4

我正在尝试使用Robert Koritnik's t4模板生成枚举。

这些不是常规枚举,我的公司正在使用偶尔在java中使用的TypeSafeEnum模式。它基本上只是一个带有值的类的集合。这并不重要,只是要注意TypeSafeEnum基类与我的EDMX和模板文件位于不同的项目中。

我也无法在我的数据库项目中引用枚举项目,因为它会创建一个循环引用。

因此,当我生成枚举类时,我引用基类但它不存在。

我的问题是:

有没有办法将T4生成的代码复制到正确的项目?

或许是一种更好的生成代码的方法,这样我就可以访问这两个命名空间了?

以下是我生成的代码片段:

using System;
using System.CodeDom.Compiler;
using xxxxxx.Core.Enums.BaseClasses;   //<--- Isnt referenced

namespace xxxxxx.Core.Enums
{
    /// <summary>
    /// InventoryAdjustmentType auto generated enumeration
    /// </summary>
    [GeneratedCode("TextTemplatingFileGenerator", "10")]
                                          //vvvvvvvv---- base class not referenced  
    public class InventoryAdjustmentType : TypeSafeEnum<InventoryAdjustmentType, byte>
    {

1 个答案:

答案 0 :(得分:3)

将您的.tt文件移动到您希望生成文件的项目:

- Solution "MySolution"
   |-> Project "DBProject"
   |      |-> MyModel.edmx
   |
   |-> Project "EnumsProject"
          |-> References
          |      |-> DBProject.dll
          |
          |-> MyT4Template.tt
                 |-> Generatedfiles.cs

然后确保为T4模板中的EDMX文件提供正确的路径,以便它可以正确读取它:

var edmxPath = "..\DBProject\MyModel.Edmx";