我想构建一个 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