错误 MSB4018 "GenerateClsidMap"任务意外失败



我正试图在Visual Studio 2019(版本16.10.1(中为Com Interop提供一个类。该项目是在.Net 5中创建的。在构建期间,我得到错误消息"error MSB4018 the";生成ClsidMap";任务意外失败。

我有以下设置:Controller.csproj:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0-windows</TargetFramework>
<EnableComHosting>true</EnableComHosting>
<EnableRegFreeCom>true</EnableRegFreeCom>
<Configurations>Debug;Release</Configurations>
</PropertyGroup>

WindowController.cs

[Guid("D2B2F7DB-XXXX-XXXX-B015-A0970C3716CB")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[ProgId("XXX.Controller.WindowController")]
public class WindowController : IWindowController

IWindowControler.cs

[Guid("5EACF76F-XXXX-XXXX-9296-12BE41A02D5B")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IWindowController
{
[DispId(10)]
string NameParameter { get; set; }
[DispId(20)]
int NrParameter { get; set; }

在搜索解决方案时,我发现了以下示例项目:https://github.com/dotnet/samples/tree/main/core/extensions/COMServerDemo

当我编译这个时,同样的错误也会发生。

有人知道这个问题或者可以重现它吗?有解决方案吗?

编辑:这是编译时的输出

1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018: The "GenerateClsidMap" task failed unexpectedly.
1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018: System.MissingMethodException: Method not found: 'Void Microsoft.NET.HostModel.ComHost.ClsidMap.Create(System.Reflection.Metadata.MetadataReader, System.String)'.
1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.NET.Build.Tasks.GenerateClsidMap.ExecuteCore()
1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskBase.Execute()
1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskWithAssemblyResolveHooks.Execute()
1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1>C:Program Filesdotnetsdk5.0.301SdksMicrosoft.NET.SdktargetsMicrosoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()

首先,我删除了Visual Studio以及.Net Core和.Net 5的所有安装,并重新安装了Visual Studio。然后我有时可以编译ComServerDemo项目,但它又不起作用了。经过进一步搜索,我发现了以下内容:添加对.NET Core上COMReference项的支持Windows 上.NET Core的COM激活

如果您通过Developer PowerShell(dotent内部版本(编译ComServerDemo,则它可以工作。在我自己的项目中,我也遇到了再次引用Com组件的问题。这似乎还不适用于.Net 5。在这里我得到以下消息:

MSB4803:任务;ResolveComReference";在.NET Core版本的MSBuild上不支持。请使用.NET Framework版本的MSBuild。

它还指页面ResolveComReference任务。它说不应该使用普通的命令行进行编译,而应该使用Developer命令行。但我还是犯了这个错误。

我们现在决定暂时使用.Net Framework 4.8来实现这一点,并且只有当Com故事在那里可靠运行时才迁移到.Net 5、6、7。

非常感谢Simon Mourier的耐心支持!

最新更新