繁体   English   中英

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

[英]Upgrading VS2017 from 15.4.1 to 15.5.1 resulted in build error

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

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

MIDL2338:开关是矛盾的 - no_robust 与 - target

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

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

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

在我弄清楚这个开关问题之前,我遇到了困难并且处于停顿状态。

非常感谢您的帮助。

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

这是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 文件的 Property Pages 对话框中,转到 Configuration Properties > MIDL > Advanced,然后清除“Minimum Target System”的值。
  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 功能。”

就消除错误而言,任何一种更改都对我有用,但第一种方法的影响最小。

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

注意: MIDL 编译器/robust开关执行以下操作( Microsoft 文档 MIDL 编译器:/robust 开关

使用/robust开关会生成允许网络数据表示 (NDR) 引擎对动态数组、联合和 DCOM 应用程序中的 in out 接口指针中的相关参数执行运行时错误检查的附加信息。 /robust 开关仅在 Windows 2000 和更高版本的 Windows 下可用。

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

<ValidateAllParameters>false</ValidateAllParameters>

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

资料来源: 参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM