dotnet/roslyn

Improve CS8893 when CallConvX is not defined in corelib

Aperta

#49.638 aperta il 26 nov 2020

 (4 commenti) (0 reazioni) (0 assegnatari)C# (4257 fork)batch import
Area-CompilersConcept-Diagnostic Clarityhelp wanted

Metriche repository

Star
 (20.414 stelle)
Metriche merge PR
 (Merge medio 6g 17h) (256 PR mergiate in 30 g)

Descrizione

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.

Guida contributor