【问题标题】:T4 copy enum between projects项目之间的 T4 复制枚举
【发布时间】:2013-08-22 22:51:58
【问题描述】:

我的解决方案中有两个项目。我需要将 Project1 中的 enum1 中的值复制到 project2 中的 enum2 中。这可以使用 T4 吗?

编辑

让我更好地描述一下我的情况。 enum1 所在的 project1 是由工具生成的。主要是从数据库生成的实体和表名的枚举。这个project1用于服务器端与数据库交互。服务器端确实通过 WCF 与客户端通信。在分离问题上,我不想通过 WCF 分享我的 project1。但是有一个带有实体名称的枚举。我使用客户端的实体名称来使某些任务通用。例如,我通过 WCF(客户端 -> 服务器)发送了一些值,并使用实体名称将值映射到适当的实体。

【问题讨论】:

  • 为什么需要这样做?您确定不想在一个地方(即第三个项目)声明它们并在另外两个地方引用它们吗?请注意,如果您在两个不同的项目中定义完全相同的枚举,则不能混合使用它们,它们仍被视为不同的类型。
  • 添加了更多信息的答案。

标签: c# .net t4


【解决方案1】:

首先,是的,您当然可以构建一个 T4 模板,在一个项目中读取您的枚举,并将它们添加到另一个项目中。

但是,您可能不想这样做。

但是,如果您这样做了,还有一种更简单的方法,您只需将原始枚举文件作为链接添加到第二个项目中即可。通过添加链接,您实际上并没有制作文件的副本,您只是在另一个项目中链接回它,然后就没有必要乱搞 T4。但是,这假设您不想以任何方式更改进程中的枚举。

要添加链接,只需单击添加现有项,像往常一样,导航到原始枚举文件,但在添加按钮上,有一个小的下拉菜单,其中包含链接菜单项。使用它,您会看到您的新文件在解决方案资源管理器中的图标上覆盖了一个小链接符号,表明它是一个链接。

但是,我说您可能不想这样做的原因是,即使您将整个枚举文件从一个项目复制到另一个项目,这两个枚举也不是同一类型。

换句话说,如果您在一个项目中需要调用另一个项目中的代码,则在调用项目 B 中声明为使用项目 B 中的枚举的代码时使用项目 A 中的枚举将不起作用,它们'重新不​​同的类型。程序集是类型标识的一部分。

如果您需要这样做,您需要在项目 A(或 B)中声明枚举,并在另一个项目中引用该项目,或者在第三个项目中声明它,并在两个 A 中引用该第三个项目和 B。

【讨论】:

  • 请看我的帖子我添加了更多信息。
【解决方案2】:

也许您可以创建模板以从一个项目中读取文件并写入包含 tt.txt 的项目中。如果您要同时使用这两个项目,请不要忘记更改类型的命名空间。

tt:

<#@ template hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".cs" #>

<#             
var path=@"..\Domain.Model\MyEnum.cs";
path = this.Host.ResolvePath(path);

var content = File.ReadAllText(path);

// mental note: learn regex once for all¡¡¡
content=content.Replace("namespace Domain.Model", "namespace Domain.Dtos"); #>

<#=content#>

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多