Visual Studio 在GitHub操作中使用文本转换(.tt)模板

9lowa7mx  于 2023-10-23  发布在  Git
关注(0)|答案(1)|浏览(148)

我尝试在GitHub操作中使用文本转换模板(Visual Studio的一个功能)。我特别使用Windows runner,它安装了Visual Studio 2022 Enterprise,所以依赖性应该在那里。
在我的.csproj文件中,我设置了如下配置:

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

然后,我还确保在构建期间进行转换:

  1. <PropertyGroup>
  2. <TransformOnBuild>true</TransformOnBuild>
  3. <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
  4. </PropertyGroup>

在本地,这在Visual Studio 2022社区版中运行良好。我添加另一个属性(CustomPathToTransforms)的原因是,在GitHub Actions中,我可以将其重定向到Visual Studio安装文件夹,而不是.NET工具文件夹,否则将使用MSBuildExtensionsPath进行拾取。
在GitHub Actions中,我这样运行构建:

  1. dotnet build --configuration Release -p:CustomPathToTransforms="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Msbuild\"
  • 在理论上 *,这应该可以工作,我可以从构建输出中看出目标被正确地找到,但是这一步失败了,而这是非常奇怪的:
  1. 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]
  2. 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]
  3. 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]
  4. 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]
  5. 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]
  6. 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]
  7. 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]
  8. 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]
  9. Build FAILED.

这是一个.NET 6.0项目,我想使跨平台(通过VS编译,虽然)。
我很好奇-我能做些什么来解决这个问题?有没有一种方法可以让流程识别我 * 假设 * 已经在GAC中的依赖关系?

ipakzgxi

ipakzgxi1#

这可能不是你想要的答案,但我建议在ImportPropertyGroup中添加一个Condition,只在调试模式下(本地)执行,而不是在构建服务器上发布。
它不仅修复了构建服务器上的构建,还确保在通过PR审查代码后不会进行wierd文件调整,我不希望在将某些内容推到Staging/Production时动态生成代码。让我们不要授权AI这个......还没有:)
范例:

  1. <Import Condition="'$(Configuration)' == 'Debug'" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets" />
  2. <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
  3. <TransformOnBuild>true</TransformOnBuild>
  4. <TransformOutOfDateOnly>true</TransformOutOfDateOnly>
  5. </PropertyGroup>

相关问题