diff --git a/src/libraries/System.Transactions.Local/src/ILLink/ILLink.Suppressions.LibraryBuild.xml b/src/libraries/System.Transactions.Local/src/ILLink/ILLink.Suppressions.LibraryBuild.xml
new file mode 100644
index 00000000000000..d002d008a2ac68
--- /dev/null
+++ b/src/libraries/System.Transactions.Local/src/ILLink/ILLink.Suppressions.LibraryBuild.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ ILLink
+ IL2026
+ member
+ M:System.Transactions.DtcProxyShim.DtcProxyShimFactory.ConnectToProxyCore(System.String,System.Guid,System.Object,System.Boolean@,System.Byte[]@,System.Transactions.DtcProxyShim.ResourceManagerShim@)
+ This warning is left in the product so developers get an ILLink warning when trimming an app using this transaction support
+
+
+
diff --git a/src/libraries/System.Transactions.Local/src/System.Transactions.Local.csproj b/src/libraries/System.Transactions.Local/src/System.Transactions.Local.csproj
index 034f32afcf5070..ff37cf621bb917 100644
--- a/src/libraries/System.Transactions.Local/src/System.Transactions.Local.csproj
+++ b/src/libraries/System.Transactions.Local/src/System.Transactions.Local.csproj
@@ -5,7 +5,6 @@
$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)
CA1805;IDE0059;CS1591
$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))
- false
diff --git a/src/libraries/System.Transactions.Local/src/System/Transactions/DtcProxyShim/DtcProxyShimFactory.cs b/src/libraries/System.Transactions.Local/src/System/Transactions/DtcProxyShim/DtcProxyShimFactory.cs
index e15983a52ab074..e8fe3c9554ca29 100644
--- a/src/libraries/System.Transactions.Local/src/System/Transactions/DtcProxyShim/DtcProxyShimFactory.cs
+++ b/src/libraries/System.Transactions.Local/src/System/Transactions/DtcProxyShim/DtcProxyShimFactory.cs
@@ -47,7 +47,10 @@ private static extern void DtcGetTransactionManagerExW(
object? pvConfigPararms,
[MarshalAs(UnmanagedType.Interface)] out ITransactionDispenser ppvObject);
- [UnconditionalSuppressMessage("Trimming", "IL2050", Justification = "Leave me alone")]
+ [RequiresUnreferencedCode("Distributed transactions support may not be compatible with trimming. If your program creates a distributed transaction via System.Transactions, the correctness of the application cannot be guaranteed after trimming.")]
+ private static void DtcGetTransactionManager(string? nodeName, out ITransactionDispenser localDispenser) =>
+ DtcGetTransactionManagerExW(nodeName, null, Guids.IID_ITransactionDispenser_Guid, 0, null, out localDispenser);
+
public void ConnectToProxy(
string? nodeName,
Guid resourceManagerIdentifier,
@@ -61,9 +64,22 @@ public void ConnectToProxy(
throw new PlatformNotSupportedException(SR.DistributedNotSupportOn32Bits);
}
+ ConnectToProxyCore(nodeName, resourceManagerIdentifier, managedIdentifier, out nodeNameMatches, out whereabouts, out resourceManagerShim);
+ }
+
+ private void ConnectToProxyCore(
+ string? nodeName,
+ Guid resourceManagerIdentifier,
+ object managedIdentifier,
+ out bool nodeNameMatches,
+ out byte[] whereabouts,
+ out ResourceManagerShim resourceManagerShim)
+ {
lock (_proxyInitLock)
{
- DtcGetTransactionManagerExW(nodeName, null, Guids.IID_ITransactionDispenser_Guid, 0, null, out ITransactionDispenser? localDispenser);
+#pragma warning disable IL2026 // This warning is left in the product so developers get an ILLink warning when trimming an app using this transaction support
+ DtcGetTransactionManager(nodeName, out ITransactionDispenser? localDispenser);
+#pragma warning restore IL2026
// Check to make sure the node name matches.
if (nodeName is not null)
diff --git a/src/libraries/System.Transactions.Local/src/System/Transactions/TransactionsEtwProvider.cs b/src/libraries/System.Transactions.Local/src/System/Transactions/TransactionsEtwProvider.cs
index ec230efce89728..f9d4e77006ff0b 100644
--- a/src/libraries/System.Transactions.Local/src/System/Transactions/TransactionsEtwProvider.cs
+++ b/src/libraries/System.Transactions.Local/src/System/Transactions/TransactionsEtwProvider.cs
@@ -573,7 +573,7 @@ internal void EnlistmentCreated(TraceSourceType traceSource, EnlistmentTraceIden
}
[Event(ENLISTMENT_CREATED_LTM_EVENTID, Keywords = Keywords.TraceLtm, Level = EventLevel.Informational, Task = Tasks.Enlistment, Opcode = Opcodes.Create, Message = "Enlistment Created (LTM). ID is {0}, type is {1}, options is {2}")]
- [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026", Justification = "Only string/int are passed")]
+ [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Only string/int are passed")]
private void EnlistmentCreatedLtm(int enlistmentIdentifier, string enlistmentType, string enlistmentOptions)
{
SetActivityId(string.Empty);
@@ -581,7 +581,7 @@ private void EnlistmentCreatedLtm(int enlistmentIdentifier, string enlistmentTyp
}
[Event(ENLISTMENT_CREATED_OLETX_EVENTID, Keywords = Keywords.TraceOleTx, Level = EventLevel.Informational, Task = Tasks.Enlistment, Opcode = Opcodes.Create, Message = "Enlistment Created (OLETX). ID is {0}, type is {1}, options is {2}")]
- [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026", Justification = "Only string/int are passed")]
+ [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Only string/int are passed")]
private void EnlistmentCreatedOleTx(int enlistmentIdentifier, string enlistmentType, string enlistmentOptions)
{
SetActivityId(string.Empty);