Skip to content
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

Debugger attributes on methods still left after trimming #1355

Closed
eerhardt opened this issue Jul 13, 2020 · 13 comments · Fixed by dotnet/runtime#39479 or mono/mono#20132
Closed

Debugger attributes on methods still left after trimming #1355

eerhardt opened this issue Jul 13, 2020 · 13 comments · Fixed by dotnet/runtime#39479 or mono/mono#20132
Assignees
Milestone

Comments

@eerhardt
Copy link
Member

eerhardt commented Jul 13, 2020

After trimming a Blazor application with the ILLink.LinkAttributes.xml defined in dotnet/runtime#39237, I'm still seeing some Debugger attributes that are on methods, for example DebuggerStepThroughAttribute:

image

But I have the following in the xml file:

    <type fullname="System.Diagnostics.DebuggerStepThroughAttribute">
      <attribute internal="RemoveAttributeInstances" />
    </type>

It does appear to remove attributes on a class, like DebuggerDisplay and DebuggerTypeProxy, so I don't know if it is just attributes on methods, or something else causing the attributes to be preserved.

@vitek-karas @tlakollo

Steps to reproduce:

In the runtime repo:

  1. Pull the changes in Remove debug only attributes when Debugger.IsSupported is false. runtime#39237
  2. .\build.cmd -s mono.corelib -rc Release -arch Wasm -os Browser to get the changes built locally

Create a Blazor application:

  1. Get the latest 5.0 SDK: https://github.com/dotnet/installer#installers-and-binaries
  2. Using the above SDK: dotnet new blazorwasm
  3. dotnet publish -c Release /bl
    • I use /bl and then get the linker command line from the _RunILLink task in the msbuild.binlog
  4. Using the linker command used during publishing, replace the path to System.Private.CoreLib.dll with your locally built WASM System.Private.CoreLib.dll - it looks like REPOROOT\artifacts\bin\mono\Browser.Wasm.Release\IL\System.Private.CoreLib.dll
  5. Link the app again - inspect the output.
@tlakollo
Copy link
Contributor

For what I was able to see the linker does have the attribute in the cache, but the action for System.Private.CoreLib is CopyUsed. Therefore the custom attribute is being marked anyway due to #1344 which only removes the attributes if the action is Link.

@marek-safar marek-safar added this to the .NET5.0 milestone Jul 14, 2020
@marek-safar
Copy link
Contributor

@tlakollo did you try to run it with link action?

@tlakollo
Copy link
Contributor

I didn't, but I just did. The attribute was removed
image

@marek-safar
Copy link
Contributor

@eerhardt could you try if passing the full path to ImmutableCollection assembly to linker with -r fixes the problem?

@eerhardt
Copy link
Member Author

Here's the full command line:

-x "obj\Release\net5.0\browser-wasm\typegranularity.trimmerdescriptor.xml"
-x "F:\dotnet\sdk\5.0.100-preview.8.20363.2\Sdks\Microsoft.NET.Sdk.Razor\build\netstandard2.0\LinkerWorkaround.xml"
-a "C:\Users\eerhardt\.nuget\packages\microsoft.jsinterop\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.JSInterop.dll"
-a "C:\Users\eerhardt\.nuget\packages\microsoft.jsinterop.webassembly\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.JSInterop.WebAssembly.dll"
-a "obj\Release\net5.0\browser-wasm\Blazor5Test.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.aspnetcore.authorization\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.AspNetCore.Authorization.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.aspnetcore.components\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.AspNetCore.Components.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.aspnetcore.components.forms\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.AspNetCore.Components.Forms.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.aspnetcore.components.web\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.AspNetCore.Components.Web.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.aspnetcore.components.webassembly\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.AspNetCore.Components.WebAssembly.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.aspnetcore.metadata\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.AspNetCore.Metadata.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.configuration\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.configuration.abstractions\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.configuration.binder\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.configuration.fileextensions\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.Configuration.FileExtensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.configuration.json\5.0.0-preview.8.20357.14\lib\net5.0\Microsoft.Extensions.Configuration.Json.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.dependencyinjection\5.0.0-preview.8.20357.14\lib\net5.0\Microsoft.Extensions.DependencyInjection.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.dependencyinjection.abstractions\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.fileproviders.abstractions\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.fileproviders.physical\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Physical.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.filesystemglobbing\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.FileSystemGlobbing.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.logging\5.0.0-preview.8.20357.14\lib\net5.0\Microsoft.Extensions.Logging.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.logging.abstractions\5.0.0-preview.8.20357.14\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.options\5.0.0-preview.8.20357.14\lib\net5.0\Microsoft.Extensions.Options.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.extensions.primitives\5.0.0-preview.8.20357.14\lib\netcoreapp3.0\Microsoft.Extensions.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.jsinterop\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.JSInterop.dll"
-p copy "Microsoft.JSInterop"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.jsinterop.webassembly\5.0.0-preview.8.20360.11\lib\net5.0\Microsoft.JSInterop.WebAssembly.dll"
-p copy "Microsoft.JSInterop.WebAssembly"
-reference "obj\Release\net5.0\browser-wasm\Blazor5Test.dll"
-p copy "Blazor5Test"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\Microsoft.CSharp.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\Microsoft.VisualBasic.Core.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\Microsoft.VisualBasic.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\Microsoft.Win32.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\Microsoft.Win32.Registry.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.AppContext.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Buffers.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Collections.Concurrent.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Collections.Immutable.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Collections.NonGeneric.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Collections.Specialized.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Collections.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ComponentModel.Annotations.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ComponentModel.DataAnnotations.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ComponentModel.EventBasedAsync.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ComponentModel.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ComponentModel.TypeConverter.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ComponentModel.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Configuration.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Console.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Core.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Data.Common.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Data.DataSetExtensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Data.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.Contracts.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.Debug.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.DiagnosticSource.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.FileVersionInfo.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.Process.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.StackTrace.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.TextWriterTraceListener.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.Tools.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.TraceSource.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Diagnostics.Tracing.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Drawing.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Drawing.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Dynamic.Runtime.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Formats.Asn1.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Globalization.Calendars.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Globalization.Extensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Globalization.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.Compression.Brotli.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.Compression.FileSystem.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.Compression.ZipFile.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.Compression.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.FileSystem.AccessControl.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.FileSystem.DriveInfo.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.FileSystem.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.FileSystem.Watcher.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.FileSystem.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.IsolatedStorage.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.MemoryMappedFiles.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.Pipes.AccessControl.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.Pipes.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.UnmanagedMemoryStream.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.IO.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Linq.Expressions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Linq.Parallel.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Linq.Queryable.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Linq.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Memory.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Http.Json.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Http.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.HttpListener.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Mail.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.NameResolution.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.NetworkInformation.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Ping.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Requests.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Security.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.ServicePoint.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.Sockets.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.WebClient.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.WebHeaderCollection.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.WebProxy.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.WebSockets.Client.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.WebSockets.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Net.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Numerics.Vectors.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Numerics.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ObjectModel.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Private.DataContractSerialization.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Private.Uri.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Private.Xml.Linq.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Private.Xml.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.DispatchProxy.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.Emit.ILGeneration.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.Emit.Lightweight.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.Emit.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.Extensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.Metadata.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.TypeExtensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Reflection.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Resources.Reader.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Resources.ResourceManager.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Resources.Writer.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.CompilerServices.Unsafe.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.CompilerServices.VisualC.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Extensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Handles.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.InteropServices.JavaScript.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.InteropServices.RuntimeInformation.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.InteropServices.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Intrinsics.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Loader.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Numerics.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Serialization.Formatters.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Serialization.Json.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Serialization.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Serialization.Xml.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.Serialization.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Runtime.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.AccessControl.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Claims.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.Algorithms.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.Cng.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.Csp.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.Encoding.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.OpenSsl.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.Primitives.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Cryptography.X509Certificates.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Principal.Windows.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.Principal.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.SecureString.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Security.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ServiceModel.Web.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ServiceProcess.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Text.Encoding.CodePages.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Text.Encoding.Extensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Text.Encoding.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Text.Encodings.Web.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Text.Json.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Text.RegularExpressions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Channels.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Overlapped.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Tasks.Dataflow.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Tasks.Extensions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Tasks.Parallel.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Tasks.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Thread.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.ThreadPool.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.Timer.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Threading.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Transactions.Local.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Transactions.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.ValueTuple.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Web.HttpUtility.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Web.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Windows.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.Linq.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.ReaderWriter.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.Serialization.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.XDocument.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.XPath.XDocument.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.XPath.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.XmlDocument.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.XmlSerializer.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.Xml.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\System.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\WindowsBase.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\mscorlib.dll"
-reference "C:\Users\eerhardt\.nuget\packages\microsoft.netcore.app.runtime.browser-wasm\5.0.0-preview.8.20361.2\runtimes\browser-wasm\lib\net5.0\netstandard.dll"
-reference "F:\git\runtime2\artifacts\bin\mono\Browser.Wasm.Release\IL\System.Private.CoreLib.dll"
-out "obj\Release\net5.0\browser-wasm\linked-debugoff"
--feature System.Diagnostics.Tracing.EventSource.IsSupported false
--feature System.Resources.UseSystemResourceKeys true
--feature System.Text.Encoding.EnableUnsafeUTF7Encoding false
--feature System.Diagnostics.Debugger.IsSupported false
-c link -u link
--skip-unresolved true 

You can see the only things with -p copy are

  • -p copy "Microsoft.JSInterop"
  • -p copy "Microsoft.JSInterop.WebAssembly"
  • -p copy "Blazor5Test"

Everything else says: -c link -u link.

@eerhardt
Copy link
Member Author

@tlakollo
Copy link
Contributor

I'm using a blazor application. Not sure if its the right one though, I use dotnet new blazorserver -o BlazorApp --no-https from this blazor tutorial https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/create
Something that is also different is that I'm passing the link attributes file directly on my command line, my guess is yours is being passed as an embedded xml in an assembly. I would need to verify that the linker is combining the different attribute files into a single ILLink.LinkAttributes.xml which is the supported name for embedded files. I think we need to have a call for me to see how are you testing this specific scenario.

@eerhardt
Copy link
Member Author

dotnet new blazorserver -o BlazorApp --no-https

This does not use a wasm app. I've updated the top post of this issue with repro steps that you can use. Let me know if you have any questions.

@tlakollo
Copy link
Contributor

The attribute is being used by one of the descriptors files, https://github.com/dotnet/runtime/blob/0ed1588a0994494c44fa52d62915ddcc0dced753/src/mono/netcore/System.Private.CoreLib/src/ILLink/ILLink.Descriptors.xml#L148 in #1332 we introduce descriptor files as a way to override the deletion of attributes.

@eerhardt
Copy link
Member Author

Nice find! I can send a PR to put those behind the feature switch.

BTW - how would someone outside of the linker team go about diagnosing this? Would --dump-dependencies help me?

@tlakollo
Copy link
Contributor

I think that's not the intended use for that flag, the dump dependencies flag creates an XML with dependencies for the analyzer. The app might not need the DebuggerStepThrough and therefore not dump it, and still due to ILLink.Descriptors keep it.
Either way, I think in this case we should warn when we reach this specific case, people populating the ILLink.LinkAttributes might not be aware of ILLink.Descriptors and vice versa.

@MichalStrehovsky
Copy link
Member

Nice find! I can send a PR to put those behind the feature switch.

Make sure you put Mono people on the PR - Mono loads these types with mono_class_load_from_name that considers the type "critical" - if the codepath is reached, it will probably abort the process:

https://github.com/dotnet/runtime/blob/2d9dbbb538322a7cc05397f5e2e15d445c7d3ff0/src/mono/mono/metadata/class.c#L3449-L3451

Mono in general seems to treat custom attributes differently than CoreCLR - in CoreCLR, we just tend to do a name match from the attribute metadata. Mono instead loads the attribute type, loads all attributes it's checking, and performs an assignability check between the data structures that represent loaded types.

In Cecil terms, the difference would be "compare TypeReference.Name and TypeReference.Namespace for the custom attribute with a string" (for the CoreCLR way) and "get TypeDefinition of the custom attribute, call Resolve() on the attribute and compare two TypeDefinitions" for assignability (for Mono). Mono's way doesn't handle the attribute being eliminated very well.

@vitek-karas
Copy link
Member

how would someone outside of the linker team go about diagnosing this? Would --dump-dependencies help me?

I would expect the dependencies to have an edge between the descriptor XML and the attribute type. There will probably be other edges to the attribute type (from all the instantiations), but those are effectively "conditional" on the one from the descriptor. I haven't tried this though.

I think in this case we should warn when we reach this specific case, people populating the ILLink.LinkAttributes might not be aware of ILLink.Descriptors and vice versa.

I don't think we should warn here. The case described in this issue is "accidental", but I think that most cases where the same attribute will be "Removed" as well as present in descriptor are the cases we designed this for - where the SDK removes the attribute, but the app says "I want to keep it anyway". Warning in that case is just pure noise - I (the app developer) explicitly added the type into the descriptor and now I also have to go a suppress the warning for no reason.

In theory it "might" be somewhat useful to warn if the removal and "keep it" are found in the same assembly (as embedded resources), but even that can be relatively tricky to get right. I would rather not warn in this case. This is not a functional problem, just a size problem. In general we don't have any diagnostic in the linker to warn developers about things which will increase size. If we ever get there, this might be part of it.

eerhardt added a commit to eerhardt/runtime that referenced this issue Jul 16, 2020
Changed debugger-agent to allow for the Debugger Attributes to not exist.
Removed the Debugger Attributes entries from the Descriptors.xml file.

Fix dotnet/linker#1355
monojenkins pushed a commit to monojenkins/mono that referenced this issue Jul 20, 2020
* Changed debugger-agent to allow for the Debugger Attributes to not exist.
* Removed the Debugger Attributes entries from the Descriptors.xml file.

Fix dotnet/linker#1355
eerhardt added a commit to dotnet/runtime that referenced this issue Jul 20, 2020
* Allow Debugger attributes to be trimmed in Mono.

Changed debugger-agent to allow for the Debugger Attributes to not exist.
Removed the Debugger Attributes entries from the Descriptors.xml file.

Fix dotnet/linker#1355

* Use GENERATE_TRY_GET_CLASS_WITH_CACHE to initialize Debugger attribute pointers.
akoeplinger pushed a commit to mono/mono that referenced this issue Jul 20, 2020
* Changed debugger-agent to allow for the Debugger Attributes to not exist.
* Removed the Debugger Attributes entries from the Descriptors.xml file.

Fix dotnet/linker#1355

Co-authored-by: eerhardt <eerhardt@users.noreply.github.com>
Jacksondr5 pushed a commit to Jacksondr5/runtime that referenced this issue Aug 10, 2020
* Allow Debugger attributes to be trimmed in Mono.

Changed debugger-agent to allow for the Debugger Attributes to not exist.
Removed the Debugger Attributes entries from the Descriptors.xml file.

Fix dotnet/linker#1355

* Use GENERATE_TRY_GET_CLASS_WITH_CACHE to initialize Debugger attribute pointers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment