MSB3073 已退出,代码为 3 - Post Build Event in Visual Studio 2017

MSB3073 exited with code 3 - Post Build Event in Visual Studio 2017

我正在尝试注册在构建期间创建的 DLL。

在项目 properties -> Build Events -> Post-Build-Event 我添加了下面的命令来执行注册,

regsvr32 /s /c "$(TargetPath)"

该命令用于注册目标路径中指定的DLL。 当我尝试构建我的代码时,我遇到了以下错误,

C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): 

error MSB3073: The command "regsvr32 /s /c "D:\Project\Debug\x64\SDK.dll"

1>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): 

error MSB3073: :VCEnd" exited with code 3.

单击错误后,它会导航到 Microsoft.CppCommon.targets

中的以下标签
 <Target Name="PostBuildEvent" Condition="'$(PostBuildEventUseInBuild)'!='false'">
<Message Text="%(PostBuildEvent.Message)" Condition="'%(PostBuildEvent.Message)' != '' and '%(PostBuildEvent.Command)' != ''" Importance="High" />
<Exec Command="%(PostBuildEvent.Command)$(_BuildSuffix)" Condition="'%(PostBuildEvent.Command)' != ''"/>

我在几个链接中搜索了 error MSB3073: :VCEnd" exited with code 3,发现它在指定的路径无效或找不到时发生。

但是,DLL 的路径在我指定的位置。我什至试图在 Post-Build-Event 中提供 DLL 的绝对路径。但是我面临同样的错误。

我在执行 Post-Build-Event 时是否遗漏了什么,或者与 regsvr32 命令有什么关系吗?

MSB3073 exited with code 3 - Post Build Event in Visual Studio 2017

该问题与您的动态库项目有关,与 VS 无关。

当你想注册一个com dll时,dll项目应该包含一个ID来注册到系统中。 但是,动态库项目默认没有ID。所以这类项目不能作为要注册的DLL。

如果你仍然想使用动态库项目,你应该implement DllRegisterServer添加ID

您可以使用包含 IDATL 项目 作为 dll 项目。

这是a similar issue about it

解决方案

1) 相反,您应该创建 ATL projects.

2) 然后,在命令中,你应该删除到目前为止被放弃的/c

或者像这样使用命令:

regsvr32 /n /i "$(TargetPath)" 作为 post-build 事件中的命令。

=====================

更新 1

由于你的项目是一个老的WRT项目,你可以直接在VS2017中新建一个WRT运行时组件项目,然后迁移将旧项目的内容添加到新项目中。它将为您节省大量时间并避免许多繁琐的错误。

1) 请先安装 C++/WinRT vs 扩展。

2) 然后创建一个新的 windows runtime componment 项目,然后将旧项目的内容迁移到新项目中。

在我这边,该项目可以很好地使用命令regsvr32 /n /i "$(TargetPath)"