michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
161 stars 52 forks source link

В VS2017 поменяли путь к msbuild.exe - я уже нарвался.:) #225

Open VictorVG opened 7 years ago

VictorVG commented 7 years ago

Вот гляди что сии поганцы нам подкинули - они переместили бинарник msbuild.exe живший в %ProgramFiles(x86)%\MSBuild\14.0\bin в каталог самой студии, причём его путь зависит от имени её редакции - _%ProgramFiles(x86)%\Microsoft Visual Studio\2017{имя_редакциистудии}\MSBuild\15.0\Bin и теперь тем кто будет сей "радостью" пользоваться придётся ещё мэйки/проекты/солюшены править под имя редакции community | professional | enterprise . Я у ребят все три установленных редакции видел и меня такая перспектива "радует" .... Вот тут я у dmex-а просил помощи, на борде ребят спросил - но и они не ту гипотезу высказали, а после сам разобрался - наитие. Сюань как мысль пришла, но посмотрел в скрипт - распишитесь и получите. Поправил и всё собирается как и ранее. Давай оставим ребятам - может кому ещё эта подсказка нервы сбережёт?

https://github.com/processhacker2/processhacker2/issues/109 I found thats point needed correct - is ./build/internal/build.ps1 :: function BuildSolution([string] $FileName)

Old value $msBuild = :

function BuildSolution([string] $FileName)
{
    # Set msbuild path (TODO: Do we need the 32bit version of MSBuild for x86 builds?)
   # Needed change patch up to new msbuild.exe location
    $msBuild = "${env:ProgramFiles(x86)}\MSBuild\14.0\bin\amd64\MSBuild.exe"
    # Get base file name

needed change up to new value $msBuild = :

function BuildSolution([string] $FileName)
{
    # Set msbuild path (TODO: Do we need the 32bit version of MSBuild for x86 builds?)
    # Change patch up to new msbuild.exe location!
    $msBuild = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\{vs_type}\MSBuild\15.0\Bin\amd64\MSBuild.exe"
    # Get base file name

then M$ move msbuild in to new location and build is [SUCCESS].

VictorVG commented 7 years ago

За компанию в этой версии компилятора вылезла ещё одна ошибка - в функции rand_s в таком вот цикле ГПСЧ:

     For (n = 0; n <count; n++)
           Salt[n] = (randSeed % 255) + 1;

          Salt[n] = 0;
       }

в конфиге релиза для х64 он похоже пытается на ноль делить и dmex был вынужден целый кусок кода переписывать https://github.com/processhacker2/processhacker2/commit/e0406b518dc2cbc0454633e32b69b98fa88e2d85 только для её обхода. Плюс пути к msbuild надо указывать с учётом каталога куда поставлена студия и её редакции - Community, Professional или Enterprise (в Реестре для сей радости более ничего нет).

pavel-pimenov commented 7 years ago

То что выкинули rand_s може - хорошо от нее возникают падения в некоторых конфигурациях (зовется abort()) http://www.sql.ru/forum/1214592/rand-s-i-win32-padenie-bazy

VictorVG commented 7 years ago

А у себя? Ну так там старая плюха которая ещё в IBM S/360 Algol-68 была - в цикле при вызове random() нельзя обнулять частичный результат ибо он делитель. Ловим деление на ноль с флагами переполнения и потери точности в слове состояния ЦП. И как последствие срабатывают схемы контроля ЦП, исключение летит в ядро и планировщик заданий ОС отрабатывая процедуру ABORT снимает сбойную задачу.