如何使BIML编译器在脚本任务,脚本组件中允许c#6语言功能

l

所需的结果:获取我的BimlStudio项目以输出SSIS包,该包的脚本任务(或脚本组件)使用C#6语言功能。

我有一个带有单个软件包的SSIS 2014项目,该软件包已导入BimlStudio

Varigence BimlStudio 5.0(64位)
内部版本5.0.63501.0

Visual Studio版本信息:

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

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

我到了要编译BimlStudio项目的地步。并非我必须这样做,但是由于我试图反映本机SSIS 2014项目的生成行为,因此我将.mst文件中的默认64位MSBuild路径更改为

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中,在“逻辑”或“项目视图”窗格中,右键单击我的项目,然后单击“生成”。

在“输出”窗格中,我得到以下信息(注意粗体错误):

    ------构建------
    工作目录:C:\ PathToMyProject \ BIMLStudioProject \ output 
    MsBuild可执行文件:C:\ WINDOWS \ system32 \ cmd.exe 
    MsBuild参数:

    使用bimlc.exe复制此构建。使用bimlc.resp文件:
    bimlc.exe @“ C:\ PathToMyProject \ BIMLStudioProject \ output \ BIMLStudioProject.mst.bimlc.resp” 

    Microsoft Windows [版本10.0.17134.706] 
    (c)2018 Microsoft Corporation。版权所有。
    C:\ PathToMyProject \ BIMLStudioProject \ output> C:\ WINDOWS \ system32 \ chcp.com 65001
    活动代码页:65001
    C:\ PathToMyProject \ BIMLStudioProject \输出> 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“ 'C:\ Program'不识别为内部或外部命令,
    可操作程序或批处理文件。
    C:\ PathToMyProject \ BIMLStudioProject \ output>退出%ERRORLEVEL%
    构建失败
    

那么在MSBuild的路径中有空格是“ verboten”吗?
我尝试在MSBuild exe的路径周围添加双引号。
那没用。也许还有另一种方法可以做到这一点?
这不是我的主要问题,但是任何帮助将不胜感激。

因此,回避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”

并输出以下内容(滚动到底部以查看加粗的错误):

    .NET Framework的Microsoft(R)构建引擎版本15.9.21 + g9802d43bc3。
    版权所有(C)Microsoft Corporation。版权所有。

    建立开始于11/8/2019 4:12:07 PM。
    节点1上的项目“ C:\ PathToMyProject \ BIMLStudioProject \ output \ BIMLStudioProject.mst.ProjectView.bimlproj”(默认目标)。
    BimlCompilerBuild:
    消息:: Biml编译器版本5.0.63501.0
    消息::选项:
    $ 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 \输出\\ 
    $ TempPath = 
    $ WorkflowPath = 
    $ BuildOnlyWithDependencies = False 
    @BuildOnly:
    @SourceFiles:
    ... 

C:\ PathToMyProject \ BIMLStudioProject \ addedBiml \ ScriptProjects \ ST_4ed03a23e1db4022ad98d6615e195f26.biml 
    ... 
    @IncludeFiles: 
    @TemplateFiles:
    @BimlDocSchemaGraphProfiles:
    @BundleFiles:
    @BundleSettings:
    @ResponseFiles:
    $ SsisDeploymentModel =项目
    $ SsasVersion = Ssas2014 
    $ SsasTabularVersion = SsasTabular2016 
    $ SsisVersion = Ssis2014 
    $ SqlVersion = SqlServer2014 
    $ DdlBuildMode = SsisPackages 
    $ SsisEncryptionPassword = 
    $ SsisExternalColumnsQueryTimeout = 
    $ ImportSsis =假
    $ ImportSsisOptionsPath = 
    $ GetHelp =假
    消息::处理Biml代码...
    消息::正在运行项目变压器...
    消息::正在运行自定义变压器...
    消息:: 1/1发射项目SagittaExtract.dtproj
    消息::正在运行核心变压器...
    消息::发射SQL Server资产...
    消息:: 1/1在脚本项目'ST_4ed03a23e1db4022ad98d6615e195f26'中发射Package PackageTemplate :\ ScriptMain.cs(129,42):错误:错误::意外字符'$'[C:\ PathToMyProject \ BIMLStudioProject \ output \ BIMLStudioProject.mst。 ProjectView.bimlproj]
    在脚本项目'ST_4ed03a23e1db4022ad98d6615e195f26':\ ScriptMain.cs(223,35):错误:错误::意外字符'$'[C:\ PathToMyProject \ BIMLStudioProject \ output \ BIMLStudioProject.mst.ProjectView.bimlproj]
    完成生成项目“ C:\ PathToMyProject \ BIMLStudioProject \ output \ BIMLStudioProject.mst.ProjectView.bimlproj”(默认目标)-失败。
    建立失败。
    


请注意,我的脚本任务包含无效字符“ $”。这将与进行字符串插值(C#6.0语言功能)相对应。

那么,如何在脚本任务中获得C#6语言功能?

我尝试使用Biml Project的默认MSBuild路径和版本,并添加/ toolsversion开关。

MSBuild.exe ... /tv:14.0

然后,更改为使用VS 2017的64位MSBuild.exe

MSBuild.exe ... /tv:15.0

两者都不起作用。

任何帮助使它起作用的方法,将不胜感激。

谢谢。

Billinkc

Biml编译器不支持Roslyn

不幸的是,Biml编译器(bimlc)不支持Roslyn(我知道这是一个未来的目标,但存在依赖关系,我不知道当前状态,只是听说即将推出新版本,可能会支持2019版SQL Server)。

我将对Varigence的人员进行确认。

路径名中的空格

永远吸入窗口并且可能会永远持续吸入。是的,您可以使用双引号"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个字符),这就是为什么它们出现在第一个“名称”列中的原因。显示“程序文件”和“程序文件(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

泡沫,冲洗,重复直到您将可执行文件放到文件夹中。长文件名无关紧要,因此路径中的Professional不会中断,仅是空格,但最终,您将位于带有.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

在这一点上,您应该能够在BimlStudio中将这些路径中的任何一个管道输送到MSBuild,然后将它们保存到.resp文件中,并查看是否可以解决路径问题中的空间。

解锁C#6.0功能

今天,我了解到您可以在SSIS脚本任务和组件中使用6.0功能。

    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!

注意:尝试将Roslyn功能添加到脚本任务可以有效地禁用脚本任务调试

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章