我们正在 Jenkins 上构建 Azure 解决方案。这包含多个 F# 项目、一个 Azure 云部署项目和一个 C# Azure 辅助角色。
在开发人员盒子上它构建得很好。在 Jenkins 上构建时,我们得到:
"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 方面指定要使用的配置(例如 UAT 或 QA)和未记录的 F# 参数 --targetprofile,它需要值 mscorlib 或 netcore .
我们可能想要一种解决方法来解耦“targetprofile”的这两种用法。理想情况下,我们不想摆弄像 F# 的目标文件之类的东西,因为显然我们必须记住将其应用到我们现在和将来可能构建的所有地方。
最佳答案
废话,MSBuild 属性名称之间的冲突。
也许您可以通过在项目中定义一个直接在 F# 编译目标之前运行的目标来解决,并将 F# TargetProfile
设置为 mscorlib
,然后还定义一个在 F# 编译之后直接运行的目标,该目标将值交换回之前的任何值.
从快速测试来看,这似乎工作正常。
<?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>
关于jenkins - 使用 --targetprofile 参数调用 F# 编译器的 Jenkins 构建错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29672437/