【问题标题】:MSB4086: A numeric comparison was attemptedMSB4086:尝试了数字比较
【发布时间】:2013-12-04 15:29:35
【问题描述】:

如果一个版本号大于另一个版本号,我的 msbuild 需要采取条件操作。 我尝试将其编码如下,但发现我收到错误(也在下方)。我哪里出错了?

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
     DefaultTargets="Main"
     ToolsVersion="4.0">

  <UsingTask TaskName="CompareVersions" TaskFactory="CodeTaskFactory"     AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <LeftHandSide Required="true"/>
      <RightHandSide Required="true"/>
      <Result ParameterType="System.Int32" Output="true"/>
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs">
        Version a = Version.Parse( LeftHandSide );
        Version b = Version.Parse( RightHandSide );
        Result = a.CompareTo(b);
      </Code>
    </Task>
  </UsingTask>

   <Target Name="Main">
    <CompareVersions LeftHandSide="3.7" RightHandSide="3.6">
      <Output ItemName="ComparisonResult" TaskParameter="Result"/>
    </CompareVersions>
    <Message Text="ComparisonResult=$(ComparisonResult)"></Message>
    <PropertyGroup>
      <Setting Condition="$(ComparisonResult) &lt; 0">true</Setting>
    </PropertyGroup>
    <Message Text="Setting=$(Setting)"></Message>
   </Target>

</Project>

S:\>msbuild test.proj Microsoft (R) Build Engine version
4.0.30319.18408 [Microsoft .NET Framework, version 4.0.30319.18408] Copyright (C) Microsoft Corporation. All rights reserved.

Build started 04/12/2013 15:26:38.
Project "S:\test.proj" on node 1 (default targets).
Main:
   ComparisonResult=
S:\test.proj(28,16): error MSB4086: A numeric comparison was attempted on "$(ComparisonResult)" that evaluates to "" instead of a number, in conditio n "$(ComparisonResult) < 0".
Done Building Project "S:\test.proj" (default targets) -- FAILED.


Build FAILED.

"S:\test.proj" (default target) (1) ->
(Main target) ->
S:\test.proj(28,16): error MSB4086: A numeric comparison was attempted on "$(ComparisonResult)" that evaluates to "" instead of a number, in condit ion "$(ComparisonResult) < 0".

   0 Warning(s)
   1 Error(s)

Time Elapsed 00:00:00.09

S:\>

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    好吧,笨蛋。

    <CompareVersions LeftHandSide="3.7" RightHandSide="3.6">
      <Output ItemName="ComparisonResult" TaskParameter="Result"/>
    </CompareVersions>
    

    应该是这样的:

    <CompareVersions LeftHandSide="3.7" RightHandSide="3.6">
      <Output PropertyName="ComparisonResult" TaskParameter="Result"/>
    </CompareVersions>
    

    PropertyName 而不是 ItemName

    【讨论】:

      【解决方案2】:

      升级视觉工作室对我有帮助。 帮助 -> 检查更新

      【讨论】:

        【解决方案3】:

        更新你所有的 NueGet 包

        【讨论】:

          猜你喜欢
          • 2019-12-29
          • 2020-10-19
          • 1970-01-01
          • 2021-10-11
          • 1970-01-01
          • 2012-12-09
          • 2021-08-03
          • 2016-07-18
          • 1970-01-01
          相关资源
          最近更新 更多