C++ 将VS2017从15.4.1升级到15.5.1导致生成错误
我正在使用以下工具/版本进行编程:Windows 10/VS2017 Professional/C++ 升级到15.5.1后,出现以下错误: MIDL2338:开关相互矛盾-无鲁棒性与目标 Microsoft编译器错误描述列表显示:编译IDL文件时,不能同时使用/osf和/ms_ext命令行开关 我的项目属性中未指定任何开关 我试图降级回15.4.1,但发现不可能恢复到旧版本,除非它是N-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。这是基于我读过的许多博客(包括堆栈溢出) 我撞到了墙上,在我解决这个开关问题之前,我一直处于停顿状态 非
非常感谢您的帮助。我刚才遇到了同样的问题,但幸运的是,我可以访问另一个较旧的安装 以下是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”,可能是一个新的默认值
在我看来,似乎有两种方法可以解决这个问题:
另外,我认为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。谢谢,谢谢,谢谢!!