Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins使用--targetprofile参数调用F#编译器时发生生成错误_Jenkins_F# - Fatal编程技术网

Jenkins使用--targetprofile参数调用F#编译器时发生生成错误

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

我们正在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.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等类型是在哪里定义的。非常感谢。如果合适,我们将尝试并标记为答案。