C++ 将VS2017从15.4.1升级到15.5.1导致生成错误

C++ 将VS2017从15.4.1升级到15.5.1导致生成错误,c++,compiler-errors,visual-studio-2017,midl,vcxproj,C++,Compiler Errors,Visual Studio 2017,Midl,Vcxproj,我正在使用以下工具/版本进行编程:Windows 10/VS2017 Professional/C++ 升级到15.5.1后,出现以下错误: MIDL2338:开关相互矛盾-无鲁棒性与目标 Microsoft编译器错误描述列表显示:编译IDL文件时,不能同时使用/osf和/ms_ext命令行开关 我的项目属性中未指定任何开关 我试图降级回15.4.1,但发现不可能恢复到旧版本,除非它是N-1。这是基于我读过的许多博客(包括堆栈溢出) 我撞到了墙上,在我解决这个开关问题之前,我一直处于停顿状态 非

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

升级到15.5.1后,出现以下错误:

MIDL2338:开关相互矛盾-无鲁棒性与目标

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

我的项目属性中未指定任何开关

我试图降级回15.4.1,但发现不可能恢复到旧版本,除非它是N-1。这是基于我读过的许多博客(包括堆栈溢出)

我撞到了墙上,在我解决这个开关问题之前,我一直处于停顿状态


非常感谢您的帮助。

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

以下是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”,可能是一个新的默认值

在我看来,似乎有两种方法可以解决这个问题:

  • 在idl文件的属性页对话框中,转到配置属性>MIDL>高级,然后清除“最小目标系统”的值
  • 摆脱-no_健壮标志。根据文件(): 如果生成的存根需要在Microsoft Windows NT、Windows 95/98或Windows Me上运行,则必须使用/no_robust命令行开关来禁用/robust功能

  • 无论是哪种更改,在消除错误方面对我都有效,但第一种方法的影响最小


    另外,我认为MS错误描述()在本例中可能不正确。您看到的原始错误消息涉及两个特定标志,/no_robust和/target,not to/osf和/ms_ext.

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

    <ValidateAllParameters>false</ValidateAllParameters>
    
    false
    
    .vcxproj
    文件中
    元素下的条目


    来源:

    您是否检查了项目属性页|链接器|嵌入式IDL?还有,文档有什么有用的话要说吗?我检查了嵌入的IDL设置。没有指定开关。此外,它还通过VS2017 v15.4.1成功构建。我对/ms_ext和/osf开关进行了大量研究,并对升级可能需要的修改进行了研究。如果您有多个包含IDL文件的项目,最好的选择是创建属性表或使用现有的属性表。仅设置所需的/robust和/target,并将属性页指定给每个项目。您还需要确保/robust和/target设置设置为“继承自父项或项目默认值”。bb292,感谢您的回复。我尝试了这两个更改,但得到了相同的错误。/iid“AceRmServer_I.c”/env win32/h“AceRmServer_h.h”/W1/char signed/tlb“Debug\BtiRmAgent.tlb”/D“_Debug”/nologob292:成功了!!在我的第一次尝试中,我删除了NT60和no_鲁棒设置。这次我只删除了NT60。谢谢,谢谢,谢谢!!