Phi*_*ans 7 c# msbuild com-interop visual-studio visual-studio-2022
我在使用 Visual Studio 2022 注册用于 COM 互操作的 C# 组件时遇到困难。我以为我理解了这个问题,但即便如此,我也没能让它工作。
\n这是基本问题:
\n由于现实世界中大多数基于 COM 的应用程序都是 32 位应用程序,因此这很可能不是您想要的。
\n虽然这显然是设计使然,但我发现这是一个不幸的设计选择,我已经在开发者社区中提出了一个问题。如果您同意我的观点,这可能有助于对该问题进行投票。
\n尝试的解决方法:
\n按照本页上的说明,我认为通过以下方式更新我们的项目会很容易:
\n这是我定义为构建后事件的命令:
\n"%Windir%Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe\xe2\x80\x9d \xe2\x80\x9c$(TargetPath)\xe2\x80\x9d /codebase\nRun Code Online (Sandbox Code Playgroud)\n这会导致错误 MSB3073 和文本“命令...退出,代码为 123”。
\n完整的输出行是:
\n1>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\xe2\x80\x9d \xe2\x80\x9cC:\\CS3\\Output\\Applications\\interop\\McDaMBusTimer.dll\xe2\x80\x9d /codebase" exited with code 123.\nRun Code Online (Sandbox Code Playgroud)\n我尝试了该命令的几种变体,但还没有找到有效的定义。
\n有人知道我作为构建后步骤必须输入的确切命令吗?
\n这个错误非常愚蠢,完全是我自己的错。
\n正确的命令是
\n"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe" "$(TargetPath)" /codebase\nRun Code Online (Sandbox Code Playgroud)\n如果需要生成类型库文件,应该使用命令
\n"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe" "$(TargetPath)" /codebase /tlb\nRun Code Online (Sandbox Code Playgroud)\n如果想直接编辑到项目文件中,可以使用
\n<PropertyGroup>\n <PostBuildEvent>"%25windir%25\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe" "$(TargetPath)" /codebase /tlb</PostBuildEvent> \n</PropertyGroup>\nRun Code Online (Sandbox Code Playgroud)\n正如西蒙·穆里尔(Simon Mourier)指出的那样,我最初使用了错误的引号。事实证明,我使用的是\n右双引号,Unicode 0x201D而不是\n正常的引号,Unicode 0x0022。
\n在我看来,您无法在 Visual Studio 中看到项目属性的差异。
\n我出现此错误的原因是我最初复制了命令
\n\xe2\x80\x9c%Windir%Microsoft.NETFramework[64]v4.0.xxxxxregasm\xe2\x80\x9d \xe2\x80\x9c$(TargetPath)\xe2\x80\x9d \nRun Code Online (Sandbox Code Playgroud)\n来自此 Microsoft 页面。如果你仔细观察,你会发现其中的差异。
\n| 归档时间: |
|
| 查看次数: |
5565 次 |
| 最近记录: |