<msbuild> задача или msbuild.exe с NAnt?

Самый простой способ сделать это для целых чисел - это использовать шестнадцатеричное при условии, что нет ничего похожего на Int.maxInt (). Причина заключается в следующем:

Макс. Значения без знака

8-bit 0xFF
16-bit 0xFFFF
32-bit 0xFFFFFFFF
64-bit 0xFFFFFFFFFFFFFFFF
128-bit 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Значения со знаком, используя 7F в качестве максимального значения со знаком

8-bit 0x7F
16-bit 0x7FFF
32-bit 0x7FFFFFFF
64-bit 0x7FFFFFFFFFFFFFFF

Значения со знаком, используя 80 в качестве максимального значение со знаком

8-bit 0x80
16-bit 0x8000
32-bit 0x80000000
64-bit 0x8000000000000000

Как это работает? Это очень похоже на двоичную тактику, и каждая шестнадцатеричная цифра составляет ровно 4 бита. Кроме того, многие компиляторы поддерживают hex намного лучше, чем двоичный.

F hex to binary: 1111
8 hex to binary: 1000
7 hex to binary: 0111
0 hex to binary: 0000

Таким образом, 7F равно 01111111 / 7FFF равно 0111111111111111. Кроме того, если вы используете это для «безумно высокой константы», 7F ... является безопасным гексом, но достаточно легко попробуйте 7F и 80 и просто распечатайте их на экране, чтобы увидеть, какой это.

0x7FFF + 0x0001 = 0x8000, поэтому ваша потеря составляет всего одно число, поэтому использование 0x7F ... обычно не является плохим компромиссом для более надежного кода, особенно после того, как вы начнете использовать 32-разрядные или более

15
задан keithm 28 July 2009 в 16:57
поделиться

1 ответ

NAntContrib предполагает .NET Framework V2.0. Если вы хотите использовать .NET 3.5, вам нужно вызвать MsBuild.exe напрямую. При обновлении до новых версий .NET вам нужно только изменить свойство MSBuildPath.

Вот пример:

<property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"/>    
<target name="build">
    <exec program="${MSBuildPath}">
        <arg line='"${SolutionFile}"' />
        <arg line="/property:Configuration=${SolutionConfiguration}" />
        <arg value="/target:Rebuild" />
        <arg value="/verbosity:normal" />
        <arg value="/nologo" />
        <arg line='/logger:"C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll"'/>
    </exec>
</target>

Значение MSBuildPath для разных версий .NET:

  • 2.0, 3.0 C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ MSBuild.exe
  • 3.5 C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5 \ MSBuild.exe
  • 4 , 4.5.x, 4.6.x, 4.7.x C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild.exe

Для 32-разрядной сборки измените Framework64 до Framework

Обновление Следуя некоторым комментариям, атрибут value используется для параметров, у которых нет пробелов. Строка используется для параметров, которые должны быть разделены пробелами. В противном случае приложение будет использовать пробел в качестве конца ввода.

26
ответ дан 1 December 2019 в 02:29
поделиться