MsBuild StartsWith不评估条件吗?

问题描述 投票:0回答:1

[为了尝试通过Mac上的VisualStudio设置一些代码覆盖率工具并在新的Xamarin.Forms项目上工作,我尝试按照netfx.props中的建议使用mac/linux `dotnet build` The reference assemblies for framework ".NETFramework.." were not found。 (我会在此处直接针对此问题发表评论,但是,我没有足够的声誉积分。)

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) Microsoft Corporation.  All Rights Reserved.  See License.txt in the project root for license information. -->
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <!-- When compiling .NET SDK 2.0 projects targeting .NET 4.x on Mono using 'dotnet build' you -->
    <!-- have to teach MSBuild where the Mono copy of the reference asssemblies is -->
    <TargetIsMono Condition="($(TargetFramework.StartsWith('net4')) OR $(TargetFrameworkVersion.StartsWith('v4.'))) AND '$(OS)' == 'Unix'">true</TargetIsMono>

    <!-- Look in the standard install locations -->
    <BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND '$(TargetIsMono)' == 'true' AND EXISTS('/Library/Frameworks/Mono.framework/Versions/Current/lib/mono')">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono</BaseFrameworkPathOverrideForMono>
    <BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND '$(TargetIsMono)' == 'true' AND EXISTS('/usr/lib/mono')">/usr/lib/mono</BaseFrameworkPathOverrideForMono>
    <BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND '$(TargetIsMono)' == 'true' AND EXISTS('/usr/local/lib/mono')">/usr/local/lib/mono</BaseFrameworkPathOverrideForMono>

    <!-- If we found Mono reference assemblies, then use them -->
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net45' OR '$(TargetFrameworkVersion)' == 'v4.5')">$(BaseFrameworkPathOverrideForMono)/4.5-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net451' OR '$(TargetFrameworkVersion)' == 'v4.5.1')">$(BaseFrameworkPathOverrideForMono)/4.5.1-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net452' OR '$(TargetFrameworkVersion)' == 'v4.5.2')">$(BaseFrameworkPathOverrideForMono)/4.5.2-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net46' OR '$(TargetFrameworkVersion)' == 'v4.6')">$(BaseFrameworkPathOverrideForMono)/4.6-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net461' OR '$(TargetFrameworkVersion)' == 'v4.6.1')">$(BaseFrameworkPathOverrideForMono)/4.6.1-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net462' OR '$(TargetFrameworkVersion)' == 'v4.6.2')">$(BaseFrameworkPathOverrideForMono)/4.6.2-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net47' OR '$(TargetFrameworkVersion)' == 'v4.7')">$(BaseFrameworkPathOverrideForMono)/4.7-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net471' OR '$(TargetFrameworkVersion)' == 'v4.7.1')">$(BaseFrameworkPathOverrideForMono)/4.7.1-api</FrameworkPathOverride>
    <FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND ('$(TargetFramework)' == 'net472' OR '$(TargetFrameworkVersion)' == 'v4.7.2')">$(BaseFrameworkPathOverrideForMono)/4.7.2-api</FrameworkPathOverride>
    <EnableFrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">true</EnableFrameworkPathOverride>

    <!-- Add the Facades directory.  Not sure how else to do this. Necessary at least for .NET 4.5 -->
    <AssemblySearchPaths Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">$(FrameworkPathOverride)/Facades;$(AssemblySearchPaths)</AssemblySearchPaths>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)'== 'net472' OR '$(TargetFrameworkVersion)' == 'v4.7.2'">
    <Reference Include="netstandard" />
  </ItemGroup>
</Project>

该文件是通过.csproj导入的,但是它仍然无法正常工作,因此我使用以下命令打印了一些调试消息:

    <Target Name="test">
        <Message Importance="High" Text="TargetFramework value is '$(TargetFramework)', starts with net4 is '$(TargetFramework.StartsWith('net4'))'" />
        <Message Importance="High" Text="TargetFrameworkVersion value is '$(TargetFrameworkVersion)', starts with v4 is '$(TargetFrameworkVersion.StartsWith('v4'))'" />
        <Message Importance="High" Text="OS value is '$(OS)'" />
        <Message Importance="High" Text="TargetIsMono value is '$(TargetIsMono)'" />
        <Message Importance="High" Text="BaseFrameworkPathOverrideForMono value is '$(BaseFrameworkPathOverrideForMono)'" />
        <Message Importance="High" Text="FrameworkPathOverride value is '$(FrameworkPathOverride)'" />
        <Message Importance="High" Text="EnableFrameworkPathOverride value is '$(EnableFrameworkPathOverride)'" />
    </Target>

并看到了:

  TargetFramework value is '', starts with net4 is 'False'
  TargetFrameworkVersion value is 'v4.7', starts with v4 is 'True'
  OS value is 'Unix'
  TargetIsMono value is ''
  BaseFrameworkPathOverrideForMono value is ''
  FrameworkPathOverride value is '/Library/Frameworks/Mono.framework/Versions/6.6.0/lib/mono/4.7-api'
  EnableFrameworkPathOverride value is ''

TargetIsMono仍然为空,即使由于TargetFrameworkVersion.StartsWithOS而应将其设置为“ true”。在使用TargetIsMono Condition之后,问题似乎是,即使StartsWith根据打印消息具有正确的布尔值,但实际上它们在Condition中的评估并不正确。

即,

    <TargetIsMono Condition="$(TargetFrameworkVersion.StartsWith('v4.'))>true</TargetIsMono>

即使没有,也不会将TargetIsMono设置为'true'。

有人有什么想法吗?我是MsBuild,Xamarin.Forms和VisualStudio的新手。任何帮助,将不胜感激!

c# xamarin.forms msbuild visual-studio-mac .net-framework-version
1个回答
0
投票

我将目标框架版本切换为4.8,然后又回到4.7,此问题自行解决。 ¯\ _(ツ)_ /¯

© www.soinside.com 2019 - 2024. All rights reserved.