在 GitHub Actions 中使用文本转换 (.tt) 模板

问题描述 投票:0回答:1

我正在尝试将文本转换模板(Visual Studio 的一项功能)与 GitHub Actions 结合使用。我专门使用 Windows 运行程序,它安装了 Visual Studio 2022 Enterprise,因此依赖项应该存在。

在我的

.csproj
文件中,我设置了如下配置:

<PropertyGroup>
    <CustomPathToTransforms>$(MSBuildExtensionsPath)</CustomPathToTransforms>
</PropertyGroup>
    
<Import Project="$(CustomPathToTransforms)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets" />

然后,我还确保在构建期间发生转换:

<PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>

在本地,这适用于 Visual Studio 2022 社区版。我添加另一个属性 (

CustomPathToTransforms
) 的原因是,在 GitHub Actions 中,我可以将其重定向到 Visual Studio 安装文件夹,而不是 .NET 工具文件夹,否则会通过
MSBuildExtensionsPath
来获取该文件夹。

在 GitHub Actions 中,我像这样运行构建:

dotnet build --configuration Release -p:CustomPathToTransforms="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\"

理论上,这应该可行,我可以从构建输出中看出目标已正确找到,但是该步骤失败得相当惊人:

C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018: The "TransformTemplates" task failed unexpectedly. [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018: System.TypeLoadException: Could not load type 'System.Windows.DependencyObject' from assembly 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.InternalConstruct() [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost..ctor(IServiceProvider serviceProvider, ITelemetryService telemetryService) [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Build.Tasks.TransformTemplatesBase.GetConfiguredTextTemplatingHost() [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Build.Tasks.TransformTemplatesBase.Execute() [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\Microsoft\VisualStudio\v17.0\TextTemplating\Microsoft.TextTemplating.targets(347,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [D:\a\grunt\grunt\Grunt\Grunt\Grunt.csproj]
Build FAILED.

这是一个我想要跨平台的.NET 6.0项目(不过是通过VS编译的)。

我很好奇 - 我能做些什么来解决这个问题?有没有办法让流程识别我假设已经在 GAC 中的依赖项?

.net visual-studio msbuild github-actions csproj
1个回答
0
投票

可能不是您正在寻找的答案,但我建议在

Condition
Import
中添加
PropertyGroup
,以便仅在调试模式(本地)上执行此操作,因此不在构建服务器上发布时执行此操作.

它不仅修复了构建服务器上的构建,还确保在通过 PR 审查代码后不会进行奇怪的文件调整,我不希望在将某些内容推送到时动态生成代码舞台/制作。我们暂时不要赋予 AI 权力……:)

示例:

<Import Condition="'$(Configuration)' == 'Debug'" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets" />
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <TransformOnBuild>true</TransformOnBuild>
    <TransformOutOfDateOnly>true</TransformOutOfDateOnly>
</PropertyGroup>
© www.soinside.com 2019 - 2024. All rights reserved.