所需的结果:获取我的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
两者都不起作用。
任何帮助使它起作用的方法,将不胜感激。
谢谢。
不幸的是,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文件中,并查看是否可以解决路径问题中的空间。
今天,我了解到您可以在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] 删除。
我来说两句