如何在xslt文件中使用C#表达式体方法?

如何在xslt文件中使用C#表达式体方法?,c#,xslt,C#,Xslt,以下是xslt文件中编译时没有错误的C#方法: <msxsl:script language="C#" implements-prefix="user"> <msxsl:assembly name="System.Core" /> <msxsl:using namespace="System.IO" /> <msxsl:using namespac

以下是xslt文件中编译时没有错误的C#方法:

  <msxsl:script language="C#" implements-prefix="user">
    <msxsl:assembly name="System.Core" />
    <msxsl:using namespace="System.IO" />
    <msxsl:using namespace="System.Collections.Generic"/>
    <msxsl:using namespace="System.Text.RegularExpressions" />
    <msxsl:using namespace="System.Linq" />
    <![CDATA[
    public string GetDesc(string state, string licNum, string date)
    {
       return string.Join("; ", new[]{ "State: " + state, "DL Number: " + licNum, "Date: " + 
       date }.Where(s => !string.IsNullOrWhiteSpace(s)));
    }
        ]]>
    </msxsl:script>
以下消息显示了输出中的错误和十个错误:


可以使用这种语法吗?

最新的MSXML是在C#6之前发布的,因此不支持所有这些新的语言功能。

最新的MSXML是在C#6之前发布的,因此不支持所有这些新的语言功能。

应该可以安装NuGet软件包,这样,
xslcomiledtransform
尝试将Roslyn C#CodeDomProvider与较新的C#功能结合使用

但是,安装路径和搜索路径不匹配,因此,正如所解释的,编译器在
bin\roslyn
中查找,而它安装在
roslyn

如果我使用第一个选项“将
\roslyn
子目录移动到
\bin\roslyn
”(我在测试中手动执行此操作),那么C代码就像您在
msxsl:script中使用的
=>
一样编译并运行.NET framework和
XSLEDTransform

我用上面命名的包的最新版本3.6.0和在VS2019中运行的C#.NET framework 4.7.2控制台应用程序尝试了这一点


除了DotNetCompilerPlatform one之外,还应该安装一个软件包来修复安装路径,但对于我来说,VS 2019和上面的设置并没有修复问题,因此,我能够执行的唯一成功测试是使用Windows资源管理器移动目录。

应该可以安装NuGet软件包,这样,
XslCompiledTransform
尝试将Roslyn C#CodeDomainProvider与较新的C#功能结合使用

但是,安装路径和搜索路径不匹配,因此,正如所解释的,编译器在
bin\roslyn
中查找,而它安装在
roslyn

如果我使用第一个选项“将
\roslyn
子目录移动到
\bin\roslyn
”(我在测试中手动执行此操作),那么C代码就像您在
msxsl:script中使用的
=>
一样编译并运行.NET framework和
XSLEDTransform

我用上面命名的包的最新版本3.6.0和在VS2019中运行的C#.NET framework 4.7.2控制台应用程序尝试了这一点

除了DotNetCompilerPlatform one之外,还应该安装一个软件包来修复安装路径,但对于我来说,VS 2019和上面的安装并没有解决问题,因此我能够执行的唯一成功测试是使用Windows资源管理器移动目录

public string GetDesc(string state, string licNum, string date) => 
string.Join("; ", new[]{ "State: " + state, "DL Number: " + licNum, "Date: " + date }
.Where(s => !string.IsNullOrWhiteSpace(s)));