Skip to content

Add necessary trimmer files for not trimming COM types. #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<linker>
<assembly fullname="System.Transactions.Local" feature="System.Runtime.InteropServices.BuiltInComInterop.IsSupported" featurevalue="true" featuredefault="true">
<!-- Imported COM interfaces -->
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.IResourceManager"/>
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.IResourceManagerFactory"/>
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.IResourceManagerFactory2"/>
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.IResourceManagerSink"/>
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.ITmNodeName"/>
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.ITransactionDispenser"/>
<type fullname="System.Transactions.DtcProxyShim.DTCInterfaces.ITransactionImportWhereabouts"/>
</assembly>
</linker>
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
<NoWarn>$(NoWarn);CS1591</NoWarn> <!-- TODO -->
<TargetPlatformIdentifier>$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))</TargetPlatformIdentifier>
</PropertyGroup>
<ItemGroup>
<ILLinkDescriptorsXmls Condition="'$(TargetPlatformIdentifier)' == 'windows'" Include="$(ILLinkDirectory)ILLink.Descriptors.Windows.xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="System\Transactions\CommittableTransaction.cs" />
<Compile Include="System\Transactions\DependentTransaction.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ namespace System.Transactions.DtcProxyShim.DTCInterfaces;
[ComImport, Guid("13741d20-87eb-11ce-8081-0080c758527e"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IResourceManagerFactory
{
[PreserveSig]
public int Create(
in Guid pguidRM,
internal void Create(
Guid pguidRM,
[MarshalAs(UnmanagedType.LPStr)] string pszRMName,
[MarshalAs(UnmanagedType.Interface)] IResourceManagerSink pIResMgrSink,
[MarshalAs(UnmanagedType.Interface)] out IResourceManager rm);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@ namespace System.Transactions.DtcProxyShim.DTCInterfaces;
[ComImport, Guid("6B369C21-FBD2-11d1-8F47-00C04F8EE57D"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IResourceManagerFactory2 : IResourceManagerFactory
{
[PreserveSig]
public new int Create(
in Guid pguidRM,
internal new void Create(
Guid pguidRM,
[MarshalAs(UnmanagedType.LPStr)] string pszRMName,
[MarshalAs(UnmanagedType.Interface)] IResourceManagerSink pIResMgrSink,
[MarshalAs(UnmanagedType.Interface)] out IResourceManager rm);
Expand All @@ -36,10 +35,10 @@ internal interface IResourceManagerFactory2 : IResourceManagerFactory
/// <param name="rm">
/// Reference to the interface on the resource manager object whose IID is specified in the <paramref name="riidRequested" /> parameter.
/// </param>
public void CreateEx(
in Guid pguidRM,
internal void CreateEx(
Guid pguidRM,
[MarshalAs(UnmanagedType.LPStr)] string pszRMName,
[MarshalAs(UnmanagedType.Interface)] IResourceManagerSink pIResMgrSink,
in Guid riidRequested,
Guid riidRequested,
[MarshalAs(UnmanagedType.Interface)] out object rm);
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ private void Initialize(SafeWaitHandle hEvent)
// TODO: Instantiate all the locks (critical sections)
}

[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2050", Justification = "Leave me alone")]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I understand the frustration... maybe we could come up with a slightly better justification 😉

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed. My first round had a slightly more colorful justification. This PR is meant as merely a way to move forward and does need to be updated.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh - you had even better one? Now I'm curious 😄
Anyway - it was just a jab, I'm sure we would never put this into the real source base.

Copy link

@vitek-karas vitek-karas Jul 5, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for the code itself - if the PInvoke is indeed OK (meaning no COM will be triggered at runtime - I don't know), the we typically do one other thing:

  • Suppressing at the method level is very coarse - unfortunately it's the only currently available way (since attributes can't be applied at IL level), and thus suppressing on large methods is problematic for future code changes (the suppression could hide a problem introduced later on)
  • For this we typically create a local function which does the one "dangerous" thing and suppress on it.
  • It is sort of "tooling's inability forcing the code to be structured in a specific way" which is unfortunate, but so far it wasn't that bad.

/cc @jkurdek

public void ConnectToProxy(
string nodeName,
Guid resourceManagerIdentifier,
Expand Down