Jenkins使用--targetprofile参数调用F#编译器时发生生成错误
我们正在Jenkins上构建Azure解决方案。它包含几个F#项目、一个Azure云部署项目和一个C#Azure工作者角色 在开发人员框上,它构建得很好。在詹金斯的基础上,我们得到:Jenkins使用--targetprofile参数调用F#编译器时发生生成错误,jenkins,f#,Jenkins,F#,我们正在Jenkins上构建Azure解决方案。它包含几个F#项目、一个Azure云部署项目和一个C#Azure工作者角色 在开发人员框上,它构建得很好。在詹金斯的基础上,我们得到: "C:\Program Files (x86)\Jenkins\jobs\REDACTED.sln" (Clean;Build target) (1) -> "C:\Program Files (x86)\Jenkins\jobs\REDACTED QA\workspace\REDACTED\REDACTED
"C:\Program Files (x86)\Jenkins\jobs\REDACTED.sln" (Clean;Build target) (1) ->
"C:\Program Files (x86)\Jenkins\jobs\REDACTED QA\workspace\REDACTED\REDACTED.csproj" (default target) (5:4) ->
"C:\Program Files (x86)\Jenkins\jobs\REDACTED QA\workspace\REDACTED.FSharp.AWS.S3\REDACTED.FSharp.AWS.S3.fsproj" (default target) (6:6) ->
(CoreCompile target) ->
FSC : error FS1052: Invalid value 'Qa' for '--targetprofile', valid values are 'mscorlib' or 'netcore'. [C:\Program Files (x86)\Jenkins\jobs\REDACTED QA\workspace\REDACTED.FSharp.AWS.S3\REDACTED.FSharp.AWS.S3.fsproj]
问题似乎与名为“TargetProfile”的MSBuild参数有关,Azure aspects需要该参数指定要使用的配置(例如UAT或QA)和名为--TargetProfile的未记录F#参数,该参数需要值mscorlib或netcore
我们可能需要一个解决方案,将“targetprofile”的这两种用法分离开来。理想情况下,我们不必处理F#的目标文件之类的东西,因为很明显,我们必须记住在现在和将来可能构建的所有地方都应用它。诸如此类,MSBuild属性名称之间的冲突 也许您可以在项目中定义一个直接在F#compile目标之前运行的目标,并将F#
TargetProfile
设置为mscorlib
,然后还可以定义一个直接在F#compile之后运行的目标,将值交换回之前的值
从一个快速测试来看,这似乎工作正常
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<!-- assume TP has Azure-specific value -->
<TargetProfile>QA</TargetProfile>
</PropertyGroup>
<Target Name="BeforeFSharpCompile" BeforeTargets="CoreCompile">
<PropertyGroup>
<TempTargetProfile>$(TargetProfile)</TempTargetProfile>
<TargetProfile>mscorlib</TargetProfile>
</PropertyGroup>
<Message Text="Swapped from $(TempTargetProfile) to $(TargetProfile)" />
</Target>
<Target Name="AfterFSharpCompile" AfterTargets="CoreCompile">
<PropertyGroup>
<TargetProfile>$(TempTargetProfile)</TargetProfile>
</PropertyGroup>
<Message Text="Swapped back to $(TargetProfile)" />
</Target>
</Project>
质量保证
$(TargetProfile)
mscorlib
$(诱惑目标配置文件)
我可能还应该说,我们使用的是VS 2013和F#3.1,我们查看了F#编译器的源代码。除非我弄错了--targetprofile参数根本不起任何作用-(--targetprofile
映射到主程序集
设置,即。它允许编译器区分“桌面”编译(其中mscorlib.dll是主框架程序集)和“可移植”编译依赖于System.Runtime.dll和其他各种类型。这是必需的,例如,要知道System.Object等类型是在哪里定义的。非常感谢。如果合适,我们将尝试并标记为答案。