![](/img/trans.png)
[英]How to check if '32-bit prefered' is toggled using visual studio variables
[英]How to register for 32-Bit COM interop using Visual Studio 2022
我在使用 Visual Studio 2022 为 COM 互操作注册 C# 组件时遇到了困难。我以为我理解了这个问题,但即便如此,我仍然无法让它工作。
这是基本问题:
由于现实世界中大多数基于 COM 的应用程序都是 32 位应用程序,因此这很可能不是您想要的。
尽管这显然是设计使然,但我发现这是一个不幸的设计选择,并且我在开发者社区中打开了一个问题。 如果你同意我的观点,它可能有助于对这个问题投赞成票。
按照此页面上的说明,我认为通过以下方式更新我们的项目会很容易:
这是我定义为构建后事件的命令:
"%Windir%Microsoft.NET\Framework\v4.0.30319\regasm.exe” “$(TargetPath)” /codebase
这会导致错误 MSB3073 和文本“命令...以代码 123 退出”。
完整的 output 行是:
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(5710,5): error MSB3073: The command ""%Windir%Microsoft.NET\Framework\v4.0.30319\regasm.exe” “C:\CS3\Output\Applications\interop\McDaMBusTimer.dll” /codebase" exited with code 123.
我已经尝试了该命令的几种变体,但我还没有找到有效的定义。
有人知道我必须作为构建后步骤输入的确切命令吗?
这个错误非常愚蠢,完全是我自己的错。
正确的命令是
"%windir%\Microsoft.NET\Framework\v4.0.30319\regasm.exe" "$(TargetPath)" /codebase
如果需要生成类型库文件,应该使用命令
"%windir%\Microsoft.NET\Framework\v4.0.30319\regasm.exe" "$(TargetPath)" /codebase /tlb
如果要直接将其编辑到项目文件中,可以使用
<PropertyGroup>
<PostBuildEvent>"%25windir%25\Microsoft.NET\Framework\v4.0.30319\regasm.exe" "$(TargetPath)" /codebase /tlb</PostBuildEvent>
</PropertyGroup>
正如 Simon Mourier 指出的那样,我最初使用了错误的引号。 事实证明,我使用的是右双引号 Unicode 0x201D而不是正常的引号 Unicode 0x0022 。
在我看来,您看不到 Visual Studio 中项目属性的差异。
我有这个错误的原因是我最初复制了命令
“%Windir%Microsoft.NETFramework[64]v4.0.xxxxxregasm” “$(TargetPath)”
从这个微软页面。 如果您仔细观察,您会发现差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.