Обновление VS2017 с 15.4.1 до 15.5.1 привело к ошибке сборки

Я программирую с помощью следующих инструментов / версий: Windows 10 / VS2017 Professional / C ++

После обновления до 15.5.1 я получил следующую ошибку:

MIDL2338: переключатели противоречивы — no_robust vs. — target

В списке описания ошибок компилятора Microsoft сказано: Вы не можете использовать оба параметра командной строки / osf и / ms_ext при компиляции файла IDL.

Ни один из этих переключателей не указан в свойствах моего проекта.

Я попытался вернуться к 15.4.1, но обнаружил, что невозможно вернуться к старой версии, если это не N-1. Это основано на многих блогах, которые я прочитал (включая переполнение стека).

Я врезался в стену и нахожусь в тупике, пока не выясню эту проблему с переключателем.

Ваша помощь будет принята с благодарностью.

5

Решение

Я столкнулся с той же проблемой только сейчас, но, к счастью, у меня есть доступ к другой, более старой установке.

Вот командная строка под VS 2017 15.4.4:

/iid "RtdHandleServer_i.c" /env win32 /h "RtdHandleServer.h" /W1 /char signed /tlb "Win32\Release\RtdHandleServer.tlb" /Oicf /D "NDEBUG" /no_robust /nologo /proxy "RtdHandleServer_p.c"

Вот что изменилось в VS 2017 15.5.1:

/iid "RtdHandleServer_i.c" /env win32 /h "RtdHandleServer.h" /W1 /char signed /tlb "Win32\Release\RtdHandleServer.tlb" /Oicf /target "NT60" /D "NDEBUG" /no_robust /nologo /proxy "RtdHandleServer_p.c"

Так что все, что изменилось, это то, что новый параметр / цель «NT60» был добавлен, предположительно, в качестве нового значения по умолчанию.

Мне кажется, что есть два пути решения этой проблемы:

  1. В диалоговом окне «Страницы свойств» для файла idl выберите «Свойства конфигурации»> «MIDL»> «Дополнительно» и очистите значение «Минимальная целевая система».
  2. Избавьтесь от флага -no_robust. Согласно документации (https://msdn.microsoft.com/en-us/library/windows/desktop/aa367349%28v=vs.85%29.aspx?f=255&MSPPError = -2147217396):

    «Параметр командной строки / no_robust должен использоваться для отключения функции / robust, если сгенерированные заглушки должны работать в Microsoft Windows NT, Windows 95/98 или Windows Me».

Любое изменение работает для меня с точки зрения избавления от ошибки, но первый метод имеет наименьшее влияние.

PS. Я думаю, что описание ошибки MS (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366756%28v=vs.85%29.aspx?f=255&MSPPError = -2147217396) скорее всего будет неправильным в этом случае. Исходное сообщение об ошибке, которое вы видите, ссылается на два конкретных флага, / no_robust а также / цель, не для / OSF а также / ms_ext.

6

Другие решения

Для того, чтобы удалить /no_robust флаг (если сгенерированные заглушки не нужно запускать в Microsoft Windows NT, Windows 95/98 или Windows Me), просто удалите

<ValidateAllParameters>false</ValidateAllParameters>

записи под <Midl> элемент в .vcxproj файлы.

Источник: ссылка

0

По вопросам рекламы [email protected]