我想构建一个docker容器,我可以用它来进行持续集成。在其中,我想构建一个需要node,.net core和.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" #>
至少它不再抱怨它找不到程序集但现在它返回以下错误。
错误:找不到类型或命名空间名称'DataSet'(您是否缺少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