diff --git a/eng/generators.targets b/eng/generators.targets index 13926ce90bd7e..4c32554b5e219 100644 --- a/eng/generators.targets +++ b/eng/generators.targets @@ -20,13 +20,15 @@ ('@(Reference)' != '' and @(Reference->AnyHaveMetadataValue('Identity', 'System.Runtime.InteropServices'))) or ('@(ProjectReference)' != '' - and @(ProjectReference->AnyHaveMetadataValue('Identity', '$(CoreLibProject)'))))" /> + and @(ProjectReference->AnyHaveMetadataValue('Identity', '$(CoreLibProject)'))) + or ('$(NetCoreAppCurrentTargetFrameworkMoniker)' == '$(TargetFrameworkMoniker)' + and '$(DisableImplicitAssemblyReferences)' == 'false'))" /> + and ('$(TargetFrameworkIdentifier)' == '.NETStandard' or '$(TargetFrameworkIdentifier)' == '.NETFramework' or ('$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionLessThan($(TargetFrameworkVersion), '$(NetCoreAppCurrentVersion)'))))" /> diff --git a/src/libraries/Common/src/Interop/Android/Interop.Logcat.cs b/src/libraries/Common/src/Interop/Android/Interop.Logcat.cs index fe35fd18da637..690555d824665 100644 --- a/src/libraries/Common/src/Interop/Android/Interop.Logcat.cs +++ b/src/libraries/Common/src/Interop/Android/Interop.Logcat.cs @@ -8,8 +8,8 @@ internal static partial class Interop { internal static partial class Logcat { - [DllImport(Libraries.Liblog)] - private static extern void __android_log_print(LogLevel level, string? tag, string format, string args, IntPtr ptr); + [GeneratedDllImport(Libraries.Liblog, CharSet = CharSet.Ansi)] + private static partial void __android_log_print(LogLevel level, string? tag, string format, string args, IntPtr ptr); internal static void AndroidLogPrint(LogLevel level, string? tag, string message) => __android_log_print(level, tag, "%s", message, IntPtr.Zero); diff --git a/src/libraries/Common/src/Interop/Interop.ICU.iOS.cs b/src/libraries/Common/src/Interop/Interop.ICU.iOS.cs index 8eb0ee177ab8d..96c64d7aaafb3 100644 --- a/src/libraries/Common/src/Interop/Interop.ICU.iOS.cs +++ b/src/libraries/Common/src/Interop/Interop.ICU.iOS.cs @@ -8,7 +8,7 @@ internal static partial class Interop { internal static partial class Globalization { - [DllImport(Libraries.GlobalizationNative, EntryPoint = "GlobalizationNative_LoadICUData")] - internal static extern int LoadICUData(string path); + [GeneratedDllImport(Libraries.GlobalizationNative, EntryPoint = "GlobalizationNative_LoadICUData", CharSet = CharSet.Ansi)] + internal static partial int LoadICUData(string path); } } diff --git a/src/libraries/Common/src/Interop/OSX/System.Native/Interop.SearchPath.cs b/src/libraries/Common/src/Interop/OSX/System.Native/Interop.SearchPath.cs index fc68cf1d37ff8..2a41f989f7793 100644 --- a/src/libraries/Common/src/Interop/OSX/System.Native/Interop.SearchPath.cs +++ b/src/libraries/Common/src/Interop/OSX/System.Native/Interop.SearchPath.cs @@ -8,8 +8,8 @@ internal static partial class Interop { internal static partial class Sys { - [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_SearchPath")] - internal static extern string? SearchPath(NSSearchPathDirectory folderId); + [GeneratedDllImport(Libraries.SystemNative, EntryPoint = "SystemNative_SearchPath", CharSet = CharSet.Ansi)] + internal static partial string? SearchPath(NSSearchPathDirectory folderId); internal enum NSSearchPathDirectory { diff --git a/src/libraries/Common/src/Interop/OSX/System.Native/Interop.iOSSupportVersion.cs b/src/libraries/Common/src/Interop/OSX/System.Native/Interop.iOSSupportVersion.cs index adffe6b460079..5a7af296163e4 100644 --- a/src/libraries/Common/src/Interop/OSX/System.Native/Interop.iOSSupportVersion.cs +++ b/src/libraries/Common/src/Interop/OSX/System.Native/Interop.iOSSupportVersion.cs @@ -8,7 +8,7 @@ internal static partial class Interop { internal static partial class Sys { - [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_iOSSupportVersion")] - internal static extern string iOSSupportVersion(); + [GeneratedDllImport(Libraries.SystemNative, EntryPoint = "SystemNative_iOSSupportVersion", CharSet = CharSet.Ansi)] + internal static partial string iOSSupportVersion(); } } diff --git a/src/libraries/Common/src/Interop/Unix/System.Native/Interop.GetNodeName.cs b/src/libraries/Common/src/Interop/Unix/System.Native/Interop.GetNodeName.cs index be1801280ca33..0c2f1ee7078b1 100644 --- a/src/libraries/Common/src/Interop/Unix/System.Native/Interop.GetNodeName.cs +++ b/src/libraries/Common/src/Interop/Unix/System.Native/Interop.GetNodeName.cs @@ -10,16 +10,16 @@ internal static partial class Interop { internal static partial class Sys { - [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetNodeName", SetLastError = true)] - private static extern unsafe int GetNodeName(char* name, out int len); + [GeneratedDllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetNodeName", SetLastError = true)] + private static unsafe partial int GetNodeName(byte* name, ref int len); internal static unsafe string GetNodeName() { // max value of _UTSNAME_LENGTH on known Unix platforms is 1024. const int _UTSNAME_LENGTH = 1024; int len = _UTSNAME_LENGTH; - char* name = stackalloc char[_UTSNAME_LENGTH]; - int err = GetNodeName(name, out len); + byte* name = stackalloc byte[_UTSNAME_LENGTH]; + int err = GetNodeName(name, ref len); if (err != 0) { // max domain name can be 255 chars. diff --git a/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MemSet.cs b/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MemSet.cs index 46449d375648c..a71c0149d5a5c 100644 --- a/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MemSet.cs +++ b/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MemSet.cs @@ -8,7 +8,7 @@ internal static partial class Interop { internal static partial class Sys { - [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MemSet")] + [GeneratedDllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MemSet")] internal static extern unsafe void* MemSet(void *s, int c, UIntPtr n); } } diff --git a/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.ChangeServiceConfig2.cs b/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.ChangeServiceConfig2.cs index 753a310ea2084..ad28538739e91 100644 --- a/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.ChangeServiceConfig2.cs +++ b/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.ChangeServiceConfig2.cs @@ -9,10 +9,13 @@ internal static partial class Interop { internal static partial class Advapi32 { - [DllImport(Libraries.Advapi32, CharSet = CharSet.Unicode, SetLastError = true)] - public static extern bool ChangeServiceConfig2(SafeServiceHandle serviceHandle, uint infoLevel, ref SERVICE_DESCRIPTION serviceDesc); + [GeneratedDllImport(Libraries.Advapi32, EntryPoint = "ChangeServiceConfig2W", ExactSpelling = true, SetLastError = true)] + public static partial bool ChangeServiceConfig2(SafeServiceHandle serviceHandle, uint infoLevel, ref SERVICE_DESCRIPTION serviceDesc); - [DllImport(Libraries.Advapi32, CharSet = CharSet.Unicode, SetLastError = true)] +#pragma warning disable DLLIMPORTGENANALYZER015 // Use 'GeneratedDllImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time + // TODO: [DllImportGenerator] Switch to use GeneratedDllImport once we support non-blittable types. + [DllImport(Libraries.Advapi32, EntryPoint = "ChangeServiceConfig2W", ExactSpelling = true, SetLastError = true)] public static extern bool ChangeServiceConfig2(SafeServiceHandle serviceHandle, uint infoLevel, ref SERVICE_DELAYED_AUTOSTART_INFO serviceDesc); +#pragma warning restore DLLIMPORTGENANALYZER015 } } diff --git a/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.CreateService.cs b/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.CreateService.cs index 593b0bd2a62c8..3c05b2d080b1c 100644 --- a/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.CreateService.cs +++ b/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.CreateService.cs @@ -9,7 +9,7 @@ internal static partial class Interop { internal static partial class Advapi32 { - [DllImport(Libraries.Advapi32, CharSet = CharSet.Unicode, SetLastError = true)] + [GeneratedDllImport(Libraries.Advapi32, CharSet = CharSet.Unicode, SetLastError = true)] public static extern IntPtr CreateService(SafeServiceHandle databaseHandle, string serviceName, string displayName, int access, int serviceType, int startType, int errorControl, string binaryPath, string loadOrderGroup, IntPtr pTagId, string dependencies, string servicesStartName, string password); diff --git a/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.DeleteService.cs b/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.DeleteService.cs index b770ff4febbc8..5804314638a60 100644 --- a/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.DeleteService.cs +++ b/src/libraries/Common/src/Interop/Windows/Advapi32/Interop.DeleteService.cs @@ -9,7 +9,7 @@ internal static partial class Interop { internal static partial class Advapi32 { - [DllImport(Libraries.Advapi32, CharSet = CharSet.Unicode, SetLastError = true)] - public static extern bool DeleteService(SafeServiceHandle serviceHandle); + [GeneratedDllImport(Libraries.Advapi32, SetLastError = true)] + public static partial bool DeleteService(SafeServiceHandle serviceHandle); } } diff --git a/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.CheckTokenMembershipEx.cs b/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.CheckTokenMembershipEx.cs index 590d8651fae4b..dad6a63281115 100644 --- a/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.CheckTokenMembershipEx.cs +++ b/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.CheckTokenMembershipEx.cs @@ -11,7 +11,7 @@ internal static partial class Kernel32 { internal const uint CTMF_INCLUDE_APPCONTAINER = 0x00000001; - [DllImport(Interop.Libraries.Kernel32, SetLastError = true)] - internal static extern bool CheckTokenMembershipEx(SafeAccessTokenHandle TokenHandle, byte[] SidToCheck, uint Flags, ref bool IsMember); + [GeneratedDllImport(Interop.Libraries.Kernel32, SetLastError = true)] + internal static partial bool CheckTokenMembershipEx(SafeAccessTokenHandle TokenHandle, byte[] SidToCheck, uint Flags, ref bool IsMember); } } diff --git a/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.Threading.cs b/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.Threading.cs index d4919d725a52c..87884a1861005 100644 --- a/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.Threading.cs +++ b/src/libraries/Common/src/Interop/Windows/Kernel32/Interop.Threading.cs @@ -11,23 +11,23 @@ internal static partial class Kernel32 { internal const int WAIT_FAILED = unchecked((int)0xFFFFFFFF); - [DllImport(Libraries.Kernel32)] - internal static extern uint WaitForMultipleObjectsEx(uint nCount, IntPtr lpHandles, BOOL bWaitAll, uint dwMilliseconds, BOOL bAlertable); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial uint WaitForMultipleObjectsEx(uint nCount, IntPtr lpHandles, BOOL bWaitAll, uint dwMilliseconds, BOOL bAlertable); - [DllImport(Libraries.Kernel32)] - internal static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds); - [DllImport(Libraries.Kernel32)] - internal static extern uint SignalObjectAndWait(IntPtr hObjectToSignal, IntPtr hObjectToWaitOn, uint dwMilliseconds, BOOL bAlertable); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial uint SignalObjectAndWait(IntPtr hObjectToSignal, IntPtr hObjectToWaitOn, uint dwMilliseconds, BOOL bAlertable); - [DllImport(Libraries.Kernel32)] - internal static extern void Sleep(uint milliseconds); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial void Sleep(uint milliseconds); internal const uint CREATE_SUSPENDED = 0x00000004; internal const uint STACK_SIZE_PARAM_IS_A_RESERVATION = 0x00010000; - [DllImport(Libraries.Kernel32)] - internal static extern unsafe SafeWaitHandle CreateThread( + [GeneratedDllImport(Libraries.Kernel32)] + internal static unsafe partial SafeWaitHandle CreateThread( IntPtr lpThreadAttributes, IntPtr dwStackSize, delegate* unmanaged lpStartAddress, @@ -35,16 +35,16 @@ internal static partial class Kernel32 uint dwCreationFlags, out uint lpThreadId); - [DllImport(Libraries.Kernel32)] - internal static extern uint ResumeThread(SafeWaitHandle hThread); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial uint ResumeThread(SafeWaitHandle hThread); - [DllImport(Libraries.Kernel32)] - internal static extern IntPtr GetCurrentThread(); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial IntPtr GetCurrentThread(); internal const int DUPLICATE_SAME_ACCESS = 2; - [DllImport(Libraries.Kernel32, SetLastError = true)] - internal static extern bool DuplicateHandle( + [GeneratedDllImport(Libraries.Kernel32, SetLastError = true)] + internal static partial bool DuplicateHandle( IntPtr hSourceProcessHandle, IntPtr hSourceHandle, IntPtr hTargetProcessHandle, @@ -66,10 +66,10 @@ internal enum ThreadPriority : int ErrorReturn = 0x7FFFFFFF } - [DllImport(Libraries.Kernel32)] - internal static extern ThreadPriority GetThreadPriority(SafeWaitHandle hThread); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial ThreadPriority GetThreadPriority(SafeWaitHandle hThread); - [DllImport(Libraries.Kernel32)] - internal static extern bool SetThreadPriority(SafeWaitHandle hThread, int nPriority); + [GeneratedDllImport(Libraries.Kernel32)] + internal static partial bool SetThreadPriority(SafeWaitHandle hThread, int nPriority); } } diff --git a/src/libraries/Common/src/Interop/Windows/User32/Interop.SystemParametersInfo.cs b/src/libraries/Common/src/Interop/Windows/User32/Interop.SystemParametersInfo.cs index 71f721a689ee8..78b42390c6127 100644 --- a/src/libraries/Common/src/Interop/Windows/User32/Interop.SystemParametersInfo.cs +++ b/src/libraries/Common/src/Interop/Windows/User32/Interop.SystemParametersInfo.cs @@ -14,7 +14,7 @@ public enum SystemParametersAction : uint SPI_GETNONCLIENTMETRICS = 0x29 } - [GeneratedDllImport(Libraries.User32, CharSet = CharSet.Unicode, ExactSpelling = true)] + [GeneratedDllImport(Libraries.User32)] public static unsafe partial bool SystemParametersInfoW(SystemParametersAction uiAction, uint uiParam, void* pvParam, uint fWinIni); } } diff --git a/src/libraries/Microsoft.Diagnostics.Tracing.EventSource.Redist/src/Microsoft/Diagnostics/Tracing/StubEnvironment.cs b/src/libraries/Microsoft.Diagnostics.Tracing.EventSource.Redist/src/Microsoft/Diagnostics/Tracing/StubEnvironment.cs index 0cffd88038be2..3d569d79f5b70 100644 --- a/src/libraries/Microsoft.Diagnostics.Tracing.EventSource.Redist/src/Microsoft/Diagnostics/Tracing/StubEnvironment.cs +++ b/src/libraries/Microsoft.Diagnostics.Tracing.EventSource.Redist/src/Microsoft/Diagnostics/Tracing/StubEnvironment.cs @@ -65,10 +65,10 @@ internal static partial class Interop [SuppressUnmanagedCodeSecurityAttribute] internal static partial class Kernel32 { - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - internal static extern int GetCurrentThreadId(); + [GeneratedDllImport(nameof(Kernel32))] + internal static partial int GetCurrentThreadId(); - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - internal static extern uint GetCurrentProcessId(); + [GeneratedDllImport(nameof(Kernel32))] + internal static partial uint GetCurrentProcessId(); } } diff --git a/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/Microsoft.Extensions.Hosting.Systemd.csproj b/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/Microsoft.Extensions.Hosting.Systemd.csproj index cc158d880d2bf..982571f565dcb 100644 --- a/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/Microsoft.Extensions.Hosting.Systemd.csproj +++ b/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/Microsoft.Extensions.Hosting.Systemd.csproj @@ -6,6 +6,7 @@ .NET hosting infrastructure for Systemd Services. false + true @@ -20,4 +21,7 @@ + + + diff --git a/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/SystemdHelpers.cs b/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/SystemdHelpers.cs index 9241a1ba8834c..244e41c69e179 100644 --- a/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/SystemdHelpers.cs +++ b/src/libraries/Microsoft.Extensions.Hosting.Systemd/src/SystemdHelpers.cs @@ -12,7 +12,7 @@ namespace Microsoft.Extensions.Hosting.Systemd /// /// Helper methods for systemd Services. /// - public static class SystemdHelpers + public static partial class SystemdHelpers { private static bool? _isSystemdService; @@ -46,7 +46,7 @@ private static bool CheckParentIsSystemd() return false; } - [DllImport("libc", EntryPoint = "getppid")] - private static extern int GetParentPid(); + [GeneratedDllImport("libc", EntryPoint = "getppid")] + private static partial int GetParentPid(); } } diff --git a/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj b/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj index 10d77e4c9ec05..54240fecb8f7e 100644 --- a/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj +++ b/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj @@ -4,6 +4,7 @@ $(DefineConstants);Unix true true + true $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser