如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

How do I configure CruiseControl's C# version for XSLT code snippets?

我正在尝试设置一个 CruiseControl.NET 实例,该实例使用包含 C# 代码片段的自定义 XSLT 显示其部分构建结果。

这曾经在另一个实例上工作(我不再可以使用它的配置 - 我只有原始的 XSLT 文件),但当前实例抱怨某些“更新的”C# 关键字,例如 var.

这让我觉得 CC.NET 使用的 XSLT 处理器当前使用的是旧的 C# 编译器。不幸的是,我找不到任何关于如何修改该行为的提示或文档。

CC.NET中是否有任何选项可以确定 XSLT 处理器使用哪种 C# 语言version/compiler?

我对 CruiseControl 一无所知,但在纯 .NET 中我认为您需要添加 NuGet 包 https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/3.6.0 然后在您的 App.config 中您需要声明要使用的 CodeDom 部分特定的 C# 语言版本

<system.codedom>
    <compilers>
  <compiler extension=".cs" language="c#;cs;csharp" warningLevel="4" compilerOptions="/langversion:7.3 /nowarn:1659;1699;1701;612;618" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

使用较新的 C# 获取 XslCompiledTransform compiler/CodeDom。

中描述了一个问题,即“将 \roslyn 子目录移动到 \bin\roslyn”,因为在 bin\roslyn 中查找编译器安装在 roslyn 中。

最后变成了:

  • 将 CC.NET 定位到最新的 .NET 版本
  • 在 IIS 中配置 AppPool 以使用 .NET 4 和
  • 通过编写类似 <compilation defaultLanguage="c#" targetFramework="4.7.2"/>
  • 的内容,在 CC.NET 网络仪表板的 Web.config 文件中明确显示目标版本