将VS2017从15.4.1升级到15.5.1会导致构建错误

时间:2017-12-13 23:23:36

标签: c++ compiler-errors visual-studio-2017 midl vcxproj

我使用以下工具/版本进行编程:Windows 10 / VS2017 Professional / C ++

升级到15.5.1后,我收到以下错误:

  

MIDL2338:开关是矛盾的 - no_robust vs. - target

Microsoft编译器错误说明列表说:编译IDL文件时,不能同时使用/ osf和/ ms_ext命令行开关。

我的项目属性中没有指定这些开关。

我试图降级回15.4.1,但发现除非是N-1,否则无法恢复旧版本。这是基于我读过的很多博客(包括Stack Overflow)。

我找到了一堵墙并处于停滞状态,直到我找到了这个开关问题。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

我刚才遇到了同样的问题,但幸运的是我可以访问另一个较旧的安装。

这是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" 

所有改变的是,添加了一个新参数 / target“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):
      

    “如果生成的存根需要在Microsoft Windows NT,Windows 95/98或Windows Me上运行,则必须使用/ no_robust命令行开关来禁用/ robust功能。”

  3. 在消除错误方面,任何一项改变都适用于我,但第一种方法影响最小。

    PS。我认为在这种情况下MS错误描述(https://msdn.microsoft.com/en-us/library/windows/desktop/aa366756%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)可能不正确。您看到的原始错误消息是指两个特定的标志, / no_robust / target ,而不是 / osf / ms_ext

答案 1 :(得分:0)

要删除/no_robust标记(如果生成的存根不需要在Microsoft Windows NT,Windows 95/98或Windows Me上运行),只需删除

即可。
<ValidateAllParameters>false</ValidateAllParameters>

<Midl>个文件中.vcxproj元素下的条目。

来源:ref