【问题标题】:Error MSB4018 The "GenerateClsidMap" task failed unexpectedly [duplicate]错误 MSB4018“GenerateClsidMap”任务意外失败 [重复]
【发布时间】:2021-08-31 09:32:31
【问题描述】:

我正在尝试为 Visual Studio 2019(版本 16.10.1)中的 Com Interop 提供一个类。该项目是在 .Net 5 中创建的。在构建期间,我收到错误消息“错误 MSB4018 “GenerateClsidMap”任务意外失败”。

我有以下设置: 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 Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(537,5): error MSB4018: The "GenerateClsidMap" task failed unexpectedly.
1>C:\Program Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.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 Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.NET.Build.Tasks.GenerateClsidMap.ExecuteCore()
1>C:\Program Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskBase.Execute()
1>C:\Program Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskWithAssemblyResolveHooks.Execute()
1>C:\Program Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1>C:\Program Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(537,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()

【问题讨论】:

  • 使用 Visual Studio 2019 16.1.0.1 编译您的项目或示例项目没有问题。您可以尝试 VS 修复。
  • 既然可以在我的同事身上复制(VS 2019 16.10.0),我无法想象这是我安装的VS。如何使用 16.1.0.1 打开 .Net Core 3.1 项目(例如上面链接中的 ComServer)?我认为您至少需要 16.4?
  • 更正:它应该读取 GenerateClsidMap 而不是 GeneratedClsidMap
  • 抱歉打错了,我的意思是 16.10.1,和你一样(还有最新的 16.10.2)。或者将您的完整项目文件发布到某处。
  • 嗨,西蒙,您可能是指 16.10。我现在尝试修复 VS 2019 --> 没有成功。我首先删除了各种扩展,然后完全删除了VS并重新安装了它->仍然出现错误。我还改变了项目中的各种东西,都没有成功。但是现在我在不用于开发的PC上安装了VS。我可以编译没有错误。我的同事和我的计算机上一定有触发此错误的东西。与此同时,我完全不知所措,不知道还能做什么。

标签: c# .net com interop


【解决方案1】:

首先,我删除了 Visual Studio 以及 .Net Core 和 .Net 5 的所有安装,然后重新安装了 Visual Studio。然后我有时可以编译 ComServerDemo 项目,然后它不再工作。经过进一步搜索,我发现了以下内容: Add support for COMReference items on .NET Core COM activation for .NET Core on Windows

如果您通过 Developer-PowerShell (dottent build) 编译 ComServerDemo 就可以工作。在我自己的项目中,我也遇到了再次引用 Com 组件的问题。这似乎不适用于.Net 5。在这里,我收到以下消息:

MSB4803:.NET Core 版本的 MSBuild 不支持任务“ResolveComReference”。请使用 .NET Framework 版本的 MSBuild。

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

我们现在决定暂时使用 .Net Framework 4.8 执行此操作,并且仅当 Com 故事在那里可靠运行时迁移到 .Net 5、6、7。

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

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2020-07-18
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多