如何为包含 T4 文件的 .net 核心项目生成持续集成



我想构建一个 docker 容器,它可以用于我们的持续集成。其中,我想构建一个需要节点、.net 核心和 .net 核心项目 T4 转换的应用程序。 如何转换需要外部程序集的 T4 文件,例如 Linux Docker 容器中的 System.Data.DataSetExtensions?

我尝试了单声道 t4 发动机 https://github.com/mono/t4。我将其安装在我的 docker 容器中,我能够进行简单的 T4 转换。但是在我们的 T4 文件中,我需要程序集。例如

<#@ Assembly Name="System.Data" #>
<#@ Import Namespace="System.Data" #>
.... some code
DataSet dsProcedures = new DataSet();       
..... more code

所以我使用dotnet restore在 docker 容器中安装我们所有的依赖项。因此,System.Data.DataSetExtensions作为 NuGet 包提供。

所以我尝试使用 dotnet-t4 的命令行参数来提供程序集的路径。这没有帮助,所以我将程序集更改为

<#@ Assembly Name="/root/.nuget/packages/system.data.datasetextensions/4.5.0/lib/netstandard2.0/System.Data.DataSetExtensions.dll" #>

至少它不再抱怨找不到程序集,但现在它返回以下错误。

错误:找不到类型或命名空间名称"数据集"(是否缺少 using 指令或程序集引用?

我正在使用以下 Dockerfile

FROM microsoft/dotnet:sdk
RUN dotnet tool install -g dotnet-t4
ENV PATH="/root/.dotnet/tools:${PATH}"

有没有办法在 Linux Docker 容器中转换具有程序集依赖项的 T4 文件? 您会切换到不同的转型引擎吗? 还是使用Windows docker容器的唯一选择?

问题是单声道 t4 库中的错误,并在 2.0.4 版本中得到了修复。 有关更多信息,请查看 GitHub 问题:https://github.com/mono/t4/issues/46

最新更新