VS 2017 - 带有版本信息(资源)的 C++ DLL 的 MSBuild 不起作用(致命错误 LNK1158:无法运行“cvtres.exe”)

Posted

技术标签:

【中文标题】VS 2017 - 带有版本信息(资源)的 C++ DLL 的 MSBuild 不起作用(致命错误 LNK1158:无法运行“cvtres.exe”)【英文标题】:VS 2017 - MSBuild of C++ DLL with version information (resource) is not functional (fatal error LNK1158: cannot run 'cvtres.exe') 【发布时间】:2018-05-15 10:06:01 【问题描述】:

我在使用最新的 Visual Studio 2017(从 2018 年 3 月 15/20 日开始)时遇到以下问题:

1) 为 C++ DLL(和相关解决方案)创建一个 Visual Studio 项目,例如 dll1Prova

2) 添加带有版本信息的资源文件(扩展名为“.rc”的文件)

3) 保存所有文件并编译。编译不错,一切正常

4) 然后使用 MSBuild,我尝试使用以下命令(来自命令提示符)构建解决方案:

设置 VisualStudioVersion=15.0 设置 VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe" dll1Prova.sln /nologo /p:PlatformToolset=v141​​;Configuration=Debug /v:detailed

我在日志末尾收到以下错误:

"C:\Users\LazzaAnd\source\repos\Dll1Prova\dll1Prova.sln" (默认目标) (1) -> “C:\Users\LazzaAnd\source\repos\Dll1Prova\Dll1Prova\Dll1Prova.vcxproj”(默认目标)(2)-> (链接目标)-> 链接:致命错误 LNK1158:无法运行 'cvtres.exe' [C:\Users\LazzaAnd\source\repos\Dll1Prova\Dll1Prova\Dll1Prova.vcx 项目]

问题似乎与安全问题有关,因为当我以机器管理员身份运行 MSBUild 时,一切正常(使用“以管理员身份运行”启动命令提示符)。

我在 Microsoft 社交论坛上提出了一个问题:

https://social.msdn.microsoft.com/Forums/it-IT/8829757b-0320-4765-8853-2a78b7b24485/vs-2017-msbuild-of-c-dll-with-version-information-resource-is-not-functional-fatal-error?forum=msbuild

但是,当我找到解决方法(以管理员身份运行)时,似乎没有进一步的建议/调查。 有没有人有同样的问题和/或对此有一些解决方案?

【问题讨论】:

不要尝试手动设置路径,只会导致问题。从开始菜单运行 VS2017 的开发人员命令提示符,然后构建。您也不需要指定 msbuild 的完整路径。 我尝试了你的建议,但得到了同样的错误。当我以管理员身份启动“VS2017 的开发人员命令提示符”(“以管理员身份运行”)时,它可以正常工作。 您是否以管理员身份安装了 VS?那是错误的。无论如何,我实际上无法重现这一点,这表明您的安装可能有问题,或者提供的步骤与您实际执行的步骤不同。 奇怪的是,它在 2018 年 3 月 15 日之前就可以正常工作。在此日期之后,不再有 VS 由机器管理员或具有管理员权限(与域机器中的所有软件一样)安装,但是现在我是它的普通用户。当我启动 VS 2017 IDE 时,它在标题栏中显示“(管理员)”。 【参考方案1】:

VS 2017 - 带有版本信息(资源)的 C++ DLL 的 MSBuild 不起作用(致命错误 LNK1158:无法运行 'cvtres.exe')

我也无法重现此问题。由于以管理员身份启动“VS2017 开发人员命令提示符”对您有效,此时,您可以自动以管理员身份运行 VS2017 开发人员命令提示符作为解决方法。

为此,打开 Windows 资源管理器,导航到以下目录以找到 VS2017 快捷方式的开发人员命令提示符,右键单击 VS2017 快捷方式的开发人员命令提示符,单击属性。切换到快捷方式选项卡,点击高级,勾选以管理员身份运行,最后点击确定,然后应用:

【讨论】:

以上是关于VS 2017 - 带有版本信息(资源)的 C++ DLL 的 MSBuild 不起作用(致命错误 LNK1158:无法运行“cvtres.exe”)的主要内容,如果未能解决你的问题,请参考以下文章

VS2017 将手动配置为 x86 的 C++ 项目加载为 VS2010 项目

VS2017的文件版本

将新对话框添加到旧版 C++ 应用程序 (VS2017) 会导致许多错误。为啥?

无法安装Visual C++ 2017 ,求解决

短路评估VS 2017 c++

VS2017 Cordova 构建错误 Remotebuild 要求您的项目使用带有 XCode 8.3 的 cordova-ios 4.3.0 或更高版本