dotnet/roslyn

Improve CS8893 when CallConvX is not defined in corelib

开放

#49,638 创建于 2020年11月26日

 (4 条评论) (0 个反应) (0 位负责人)C# (4,257 个派生)batch import
Area-CompilersConcept-Diagnostic Clarityhelp wanted

仓库指标

星标
 (20,414 个星标)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 256 个 PR)

描述

Version Used: .NET CORE SDK 5.0.100

Steps to Reproduce:

  1. Create a new library that targets netcoreapp3.1.
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
</Project>
  1. Attempt to compile the following code:
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

namespace MyNamespace
{
	public class Class1
	{
		[UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })]
		public static void TestImpl() { }
	}
}

#if !NET5_0
namespace System.Runtime.InteropServices
{
	[AttributeUsage(AttributeTargets.Method, Inherited = false)]
	public sealed class UnmanagedCallersOnlyAttribute : Attribute
	{
		public UnmanagedCallersOnlyAttribute() { }
		public Type[] CallConvs;
		public string EntryPoint;
	}
}
#endif

Expected Behavior:

Build succeeded. 0 Warning(s) 0 Error(s)

Actual Behavior:

error CS8893: 'CallConvStdcall' is not a valid calling convention type for 'UnmanagedCallersOnly'.

Notes: This code compiles fine for net45, netstandard2.0, netstandard2.1.

贡献者指南