Как получить компилятор BIML, позволяющий использовать функции языка c # 6 в задачах сценариев, компонентах сценариев - PullRequest
2 голосов
/ 09 ноября 2019

Желаемый результат: получить проект BimlStudio для вывода пакета служб SSIS, задачи сценариев (или компоненты сценариев) которого используют функции языка C # 6.

У меня есть проект SSIS 2014 содин пакет, который я импортировал в BimlStudio

Varigence BimlStudio 5.0 (64-bit)
Build 5.0.63501.0

Информация о версии Visual Studio:

Microsoft Visual Studio Professional 2017 
Version 15.9.5
VisualStudio.15.Release/15.9.5+28307.280
Microsoft .NET Framework
Version 4.7.03056

Microsoft Visual Studio Tools for Applications 2017   00370-20004-06228-AA500

Я дошел до того, что пытался скомпилировать свой проект BimlStudio. Не то, чтобы я ДОЛЖЕН это делать, но поскольку я пытаюсь отразить поведение сборки моего собственного проекта SSIS 2014, я изменил 64-битный путь MSBuild по умолчанию в файле .mst с

C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe

на

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\amd64\MSBuild.exe
Технически, чтобы получить возможности C # 6, я не верю, что это необходимо, но выслушаю меня.

В BimlStudio, на панели логического представления или представления проекта, ящелкните правой кнопкой мыши по моему проекту и выберите Build.

На панели «Вывод» я получаю следующее (обратите внимание на ошибку, выделенную жирным шрифтом):

    ------ Build ------
    Working Directory: C:\PathToMyProject\BIMLStudioProject\output
    MsBuild Executable: C:\WINDOWS\system32\cmd.exe
    MsBuild Arguments: 

    To replicate this build with bimlc.exe. Use the bimlc.resp file:
    bimlc.exe @"C:\PathToMyProject\BIMLStudioProject\output\BIMLStudioProject.mst.bimlc.resp"

    Microsoft Windows [Version 10.0.17134.706]
    (c) 2018 Microsoft Corporation. All rights reserved.
    C:\PathToMyProject\BIMLStudioProject\output>C:\WINDOWS\system32\chcp.com 65001
    Active code page: 65001
    C:\PathToMyProject\BIMLStudioProject\output>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\amd64\MSBuild.exe @"C:/_Development/Test Projects/BIML/BIMLStudioProject/output/BIMLStudioProject.mst.resp"
    <b>'C:\Program' is not recognized as an internal or external command,
    operable program or batch file.</b>
    C:\PathToMyProject\BIMLStudioProject\output>exit %ERRORLEVEL%
    Build Failed

Имея пробелы в пути кMSBuild это "verboten"? Я попытался добавить двойные кавычки по пути к exe MSBuild.
Это не сработало. Может быть, есть другой способ сделать это? Это не мой основной вопрос, но любая помощь там будет принята.

Итак, обойдя ограничение среды BimlStudio IDE, я перепрыгиваю в командную строку и выполняю следующее:

    cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\amd64\"
    MSBuild.exe @"C:/PathToMyProject/BIMLStudioProject/output/BIMLStudioProject.mst.resp"

И это выводит следующее (прокрутите вниз, чтобы просмотреть жирные ошибки):

    Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
    Copyright (C) Microsoft Corporation. All rights reserved.

    Build started 11/8/2019 4:12:07 PM.
    Project "C:\PathToMyProject\BIMLStudioProject\output\BIMLStudioProject.mst.ProjectView.bimlproj" on node 1 (default targets).
    BimlCompilerBuild:
    Message:: Biml Compiler Version 5.0.63501.0
    Message:: Options:
    $TargetBimlScriptPrecompiledAssemblyPackagePath =
    $PrecompileBimlScript = False
    $LicenseKey =
    $DisplayMachineCode = False
    $TransformationScriptSettings =
    $TransformationScriptResourceAssembly =
    $TransformationScriptBundle =
    $PackageConfigurationPath = C:\PackageConfigurations
    $DocumentationOutputPath = C:\PathToMyProject\BIMLStudioProject\documentation
    $DocumentationSettings =
    $DocumentationTemplate =
    $BuildDocumentation = False
    $CleanOutputFolder = True
    $WarnAsError = False
    $Warn = 4
    $TargetPath = C:\PathToMyProject\BIMLStudioProject\output\\
    $TempPath =
    $WorkflowPath =
    $BuildOnlyWithDependencies = False
    @BuildOnly:
    @SourceFiles:
    ...

C:\PathToMyProject\BIMLStudioProject\addedBiml\ScriptProjects\ST_4ed03a23e1db4022ad98d6615e195f26.biml
    ...
    @IncludeFiles:
    @TemplateFiles:
    @BimlDocSchemaGraphProfiles:
    @BundleFiles:
    @BundleSettings:
    @ResponseFiles:
    $SsisDeploymentModel = Project
    $SsasVersion = Ssas2014
    $SsasTabularVersion = SsasTabular2016
    $SsisVersion = Ssis2014
    $SqlVersion = SqlServer2014
    $DdlBuildMode = SsisPackages
    $SsisEncryptionPassword =
    $SsisExternalColumnsQueryTimeout =
    $ImportSsis = False
    $ImportSsisOptionsPath =
    $GetHelp = False
    Message:: Processing Biml Code...
    Message:: Running Project Transformers...
    Message:: Running Custom Transformers...
    Message:: Running Core Transformers...
    Message:: Emitting SQL Server Assets...
    Message:: 1/1 Emitting Project SagittaExtract.dtproj
    Message::     1/1 Emitting Package PackageTemplate
    <b>In Script Project 'ST_4ed03a23e1db4022ad98d6615e195f26': \ScriptMain.cs(129,42): error : Error:: Unexpected character '$' [C:\PathToMyProject\BIMLStudioProject\output\BIMLStudioProject.mst.ProjectView.bimlproj]
    In Script Project 'ST_4ed03a23e1db4022ad98d6615e195f26': \ScriptMain.cs(223,35): error : Error:: Unexpected character '$' [C:\PathToMyProject\BIMLStudioProject\output\BIMLStudioProject.mst.ProjectView.bimlproj]</b>
    Done Building Project "C:\PathToMyProject\BIMLStudioProject\output\BIMLStudioProject.mst.ProjectView.bimlproj" (default targets) -- FAILED.


    Build FAILED.

Обратите внимание, что в моей задаче сценария есть недопустимый символ '$'. Это будет соответствовать выполнению строковой интерполяции (функция языка C # 6.0).

Итак, что мне делать, чтобы получить функции языка C # 6 в моей задаче сценария?

I 'мы попытались использовать путь и версию MSBuild по умолчанию для Biml Project и добавили ключ / toolsversion.

MSBuild.exe ... /tv:14.0

Затем изменили использование 64-разрядного MSBuild.exe VS 2017

MSBuild.exe ... /tv:15.0

Ни один из них не сработал.

Любая помощь в получении этого будет очень признательна.

Спасибо.

1 Ответ

1 голос
/ 09 ноября 2019

Пробелы в именах путей

Всасывали в окнах навсегда и, вероятно, будут продолжать сосать вечно. Да, вы можете заключить в двойные кавычки, так что "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\amd64\MSBuild.exe" будет работать, но что, если что-то еще требует кавычек или $ Diety-help-you, вы должны передать это как аргумент чему-то вроде xp_cmdshell, который допускает только один элемент во всем аргументеиметь пару двойных кавычек ... Да, подход заключается в использовании грязных хаков соглашения о присвоении имен dos 8.3, потому что они все еще работают.

Из командной строки Win + R cmd.exe

cd /d C:\
dir /x

Это указывает командной оболочке на смену дисков и переход к корню диска C. /x во второй команде

отображает короткие имена, сгенерированные для имен файлов не-8dot3.

Таким образом, вы должны увидеть некоторые выходные данные, подобные этим

C:\>dir /x
 Volume in drive C has no label.
 Volume Serial Number is 3AB8-1C01

 Directory of C:\

10/30/2019  04:26 PM    <DIR>                       Dropbox
03/13/2019  06:07 PM    <DIR>                       Intel
08/25/2019  01:32 PM    <DIR>                       javajars
10/19/2019  03:33 PM    <DIR>          NEVERW~1     NeverwinterNights
03/12/2019  04:34 PM    <DIR>                       NVIDIA
08/25/2019  02:01 PM    <DIR>                       OnMyPath
03/18/2019  10:52 PM    <DIR>                       PerfLogs
10/14/2019  09:57 PM    <DIR>          PROGRA~1     Program Files
10/19/2019  03:51 PM    <DIR>          PROGRA~2     Program Files (x86)
11/14/2018  07:16 PM    <DIR>                       Python27
11/14/2018  07:16 PM    <DIR>          PYTHON~1     Python27amd64
06/22/2019  11:17 AM    <DIR>                       Src
06/30/2019  08:45 PM    <DIR>                       ssisdata
10/19/2019  01:52 PM    <DIR>                       TEMP
06/28/2019  02:21 PM    <DIR>                       tmp
07/30/2019  06:52 AM           110,312              UkLog.dat
05/28/2019  04:25 PM    <DIR>                       Users
10/19/2019  03:54 PM    <DIR>                       Windows
               1 File(s)        110,312 bytes
              17 Dir(s)  333,863,874,560 bytes free

NeverwinterNights и Python27amd64 слишком длинные (большечем 8 символов), поэтому они отображаются в первом столбце «имя». «Program Files» и «Program Files (x86)» отображаются потому, что в их именах есть пробел (также более 8 символов).

Важно использовать альтернативное имя. Шаблон не сложный, это первые 6 символов, меньше пробела, а затем ~# от 1 до 9, пока вы не получите более 9 заявок.

C:\PROGRA~2>dir /x mic*
 Volume in drive C has no label.
 Volume Serial Number is 3AB8-1C01

 Directory of C:\PROGRA~2

02/21/2018  06:00 AM    <DIR>          MICROS~2     Microsoft Analysis Services
03/16/2018  02:17 AM    <DIR>          MICROS~2.NET Microsoft ASP.NET
06/22/2019  01:24 PM    <DIR>          MI7DE1~1     Microsoft Azure Storage Explorer
04/24/2019  06:48 PM    <DIR>          MICROS~4     Microsoft Help Viewer
03/01/2018  12:36 PM    <DIR>          MIF5BA~1     Microsoft Office
09/12/2018  04:35 PM    <DIR>          MI29F1~1     Microsoft OneDrive
10/24/2018  06:12 AM    <DIR>          MICROS~3     Microsoft SDKs
01/19/2019  10:48 AM    <DIR>          MI9950~1     Microsoft Silverlight
07/11/2019  08:10 PM    <DIR>          MICROS~1     Microsoft SQL Server
04/24/2019  06:50 PM    <DIR>          MIEFB9~1     Microsoft SQL Server Management Studio 18
11/14/2018  07:17 PM    <DIR>          MIB055~1     Microsoft Visual Studio
02/21/2018  06:02 AM    <DIR>          MICROS~2.0   Microsoft Visual Studio 10.0
05/28/2019  04:33 PM    <DIR>          MICROS~3.0   Microsoft Visual Studio 11.0
05/28/2019  04:33 PM    <DIR>          MICROS~4.0   Microsoft Visual Studio 12.0
05/28/2019  04:33 PM    <DIR>          MICROS~1.0   Microsoft Visual Studio 14.0
10/24/2018  06:07 AM    <DIR>          MIFDD6~1     Microsoft Web Tools
05/28/2019  07:23 PM    <DIR>                       Microsoft.NET
               0 File(s)              0 bytes
              17 Dir(s)  333,865,095,168 bytes free

Я уверен, что магия в том, какРабота с альтернативными именами была задокументирована ... 25 лет назад - я думаю, что эта чепуха вышла с Windows 95, но серьезно, черт возьми, с ней.

Итак, вы ищете сборку, которая находится в папке x86,Не позволяйте завершению табуляции помочь вам изменить каталог, так как он будет использовать полное имя, а не короткое. cd progra~2

Мыть, полоскать, повторять до тех пор, пока вы не попадете в папку с вашим исполняемым файлом. Длинные имена файлов не будут иметь значения, поэтому ваш Профессионал в пути не сломается, это всего лишь пробел, но в конечном итоге вы попадете в папку с .exe, а затем просто найдете путь. Я выбираю ленивый маршрут и просто прошу dir построить мне путь с dir /s /b msbuild.exe

C:\PROGRA~2\MIB055~1\2017\Enterprise\MSBuild\15.0\Bin>dir /s /b MSBuild.exe
C:\PROGRA~2\MIB055~1\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe
C:\PROGRA~2\MIB055~1\2017\Enterprise\MSBuild\15.0\Bin\amd64\MSBuild.exe

. На этом этапе вы должны иметь возможность направить любой из этих путей к MSBuild в BimlStudio, который затем сохраняет их. в файл .resp и посмотрите, решает ли это проблему с пробелами в пути.

Разблокировка функций C # 6.0

Сегодня я узнал, что может использовать функции 6.0 в скрипте SSISЗадачи и компоненты.

    public void Main()
    {
        string name = "mark";
        string v = $"Hello, {name}!";
        bool fireagain = false;
        Dts.Events.FireInformation(0, "Really worked", v, string.Empty, 0, ref fireagain);

        Dts.TaskResult = (int)ScriptResults.Success;
    }

и там в моем окне вывода

Information: 0x0 at Script Task, Really worked: Hello, mark!

К сожалению, компилятор Biml (bimlc) не поддерживает roslyn (я знал, что это будущее)цель, но были зависимости, и я не знаю текущего состояния, за исключением того, что, как я слышал, скоро будет новое снижение, вероятно, для поддержки выпуска SQL Server 2019 года). Я буду пинговать людей из Varigence (авторов BimlStudio и BimlExpress), чтобы подтвердить.

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