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