我不知道这是否可能,但是,
您可以将 T4 脚本放在一个单独的项目中,并使用 MSBuild 任务将生成的文件复制到您的 EF 实体项目中。
您的解决方案应该包含
- 您的 EF 实体项目,我们称之为 Entities
- 实体生成器项目(您将把 T4 脚本放在这里),例如将其称为 EntitiesGenerator
您还需要为自定义 MSBuild 任务创建一个项目,该任务会将您生成的 C# 文件复制到您的“实体”项目中
为此,请创建一个类库项目MyBuildProcess
参考以下程序集:
- Microsoft.Build.Framework(位于 C:\Windows\Microsoft.NET\Framework\v4.0.30319)
现在,让我们编写自定义任务
将类文件添加到您的项目中,例如 CopyGeneratedEntities.cs
using System;
using Microsoft.Build.Framework;
using System.IO;
namespace MyBuildProcess
{
public class CopyGeneratedEntities : ITask
{
private IBuildEngine _buildEngine;
public IBuildEngine BuildEngine
{
get { return _buildEngine; }
set { _buildEngine = value; }
}
private ITaskHost _hostObject;
public ITaskHost HostObject
{
get { return _hostObject; }
set { _hostObject = value; }
}
public bool Execute()
{
// Copy generated Product entity to EF project
if (File.Exists(@"C:\MySolution\EntitiesGenerator\ProductEntity.cs"))
{
File.Copy(@"C:\MySolution\EntitiesGenerator\ProductEntity.cs",
@"C:\MySolution\Entities\ProductEntity.cs", true);
}
return true;
}
}
}
构建你的项目
现在编辑与您的 T4 项目 (EntitiesGenerator) 相对应的 .csproj 文件,并通过在 <Project ... > 标记下添加以下内容来引用自定义任务:
<UsingTask AssemblyFile="C:\MySolution\Libs\MyBuildProcess.dll"
TaskName="MyBuildProcess.CopyGeneratedEntities" />
并像这样调用任务(在 csproj 文件的末尾,</Project> 之前):
<Target Name="AfterBuild">`
<CopyGeneratedEntities />
</Target>
现在,当您构建 EntitiesGenerator 项目时,
T4 呈现您的实体,一旦构建结束,您的自定义任务就会被调用,并且您的文件会被复制到您的“实体”项目中。
您只需要在第一代之后手动将生成的 C# 文件引用到您的实体项目中,
然后它们就会被覆盖。
有关 MSBuild 的更多信息
看。
MSBuild Team Blog - How To: Implementing Custom Tasks
Microsoft.Build Namespaces