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。
您可以使用包含 ID 的 ATL 项目 作为 dll 项目。
解决方案
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)"
。
我正在尝试注册在构建期间创建的 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。
您可以使用包含 ID 的 ATL 项目 作为 dll 项目。
解决方案
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)"
。