Как использовать метод C#, содержащий выражение в файле xslt? - PullRequest
0 голосов
/ 06 августа 2020

Вот метод C# в файле xslt, который компилируется без ошибок:

  <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>

однако, если я изменю его на метод, основанный на выражении

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

, появится следующее сообщение и десять ошибок в выводе:

ошибка

Можно ли использовать этот синтаксис?

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Должна быть возможность установить пакет NuGet https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/, таким образом XslCompiledTransform пытается использовать Roslyn C# CodeDomProvider с новыми функциями C#.

Однако каким-то образом пути установки и поиска не совпадают, поэтому, как объясняет { ссылка }, компилятор ищется в bin\roslyn, а он установлен в roslyn.

Если я использую первую опцию «переместить подкаталог \roslyn в \bin\roslyn» (я сделал это вручную для теста), то код C#, подобный вашему использованию => внутри msxsl:script, компилируется и запускается с . NET framework и XslCompiledTransform.

Я пробовал это с последней версией 3.6.0 указанного выше пакета и консольным приложением C#. NET framework 4.7.2, запущенным в VS 2019. .

Существует также пакет https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix/, который должен быть установлен в дополнение к DotNetCompilerPlatform, чтобы исправить путь установки, но каким-то образом для меня с VS 2019 и вышеуказанной настройкой не устранил проблему, поэтому единственный успешный Тест, который мне удалось выполнить, - это переместить каталог с помощью Windows Explorer.

1 голос
/ 06 августа 2020

Последняя версия MS XML была выпущена задолго до C# 6, поэтому все эти новые языковые функции не поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...