项目之间的T4复制枚举

时间:2011-01-12 08:38:57

标签: c# .net t4

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

修改

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

2 个答案:

答案 0 :(得分:4)

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

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

但是,如果你这样做,有一个更简单的方法,你只需将原始枚举文件添加为第二个项目的链接。通过添加一个链接,你实际上并没有制作文件的副本,你只是在另一个项目中链接回它,然后就没有必要用T4来解决问题了。但是,这假设您不希望以任何方式更改过程中的枚举。

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

不过,我说你可能不希望这样做的原因是,即使你,因为它是复制整个枚举文件从一个项目到另一个,这两个枚举是不一样的类型。

在换句话说,如果你在一个项目中需要调用其他的项目代码,调用B工程的代码被宣布为在使用B工程的枚举将无法正常工作时,使用枚举从项目A,他们”不同的类型。程序集是该类型标识的一部分。

如果您需要这样做,则要么需要声明在项目A中的枚举(或B),和参考该项目中的另一个,或声明它在第三项目,并且参照在两个第三个项目和B.

答案 1 :(得分:0)

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

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#>