【发布时间】: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。我可以编译没有错误。我的同事和我的计算机上一定有触发此错误的东西。与此同时,我完全不知所措,不知道还能做什么。