Skip to content

Files passed with -embed:relative/path/to/file are not embedded #16768

@Smaug123

Description

@Smaug123

Here's an example fsc invocation which I pulled from an msbuild command:

--debug:embedded
--embed:obj/Release/netstandard2.0/FsCheck.NUnit.AssemblyInfo.fs
--sourcelink:obj/Release/netstandard2.0/FsCheck.NUnit.sourcelink.json
--noframework
--define:TRACE
--define:RELEASE
--define:NETSTANDARD
--define:NETSTANDARD2_0
--define:NETSTANDARD1_0_OR_GREATER
--define:NETSTANDARD1_1_OR_GREATER
--define:NETSTANDARD1_2_OR_GREATER
--define:NETSTANDARD1_3_OR_GREATER
--define:NETSTANDARD1_4_OR_GREATER
--define:NETSTANDARD1_5_OR_GREATER
--define:NETSTANDARD1_6_OR_GREATER
--define:NETSTANDARD2_0_OR_GREATER
--doc:obj/Release/netstandard2.0/FsCheck.NUnit.xml
--optimize+
-r:/Users/patrick/Documents/GitHub/FsCheck/src/FsCheck/bin/Release/netstandard2.0/FsCheck.dll
-r:/Users/patrick/.nuget/packages/fsharp.core/5.0.2/lib/netstandard2.0/FSharp.Core.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/mscorlib.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/netstandard.dll
-r:/Users/patrick/.nuget/packages/nunit/3.13.1/lib/netstandard2.0/nunit.framework.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.AppContext.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Collections.Concurrent.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Collections.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Collections.NonGeneric.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Collections.Specialized.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.Composition.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Console.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Core.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Data.Common.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Data.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.Contracts.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.Debug.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.Process.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.Tools.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.Tracing.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Drawing.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Drawing.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Dynamic.Runtime.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Globalization.Calendars.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Globalization.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Globalization.Extensions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.Compression.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.FileSystem.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.IsolatedStorage.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.Pipes.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Linq.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Linq.Expressions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Linq.Parallel.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Linq.Queryable.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.Http.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.NameResolution.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.NetworkInformation.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.Ping.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.Requests.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.Security.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.Sockets.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.WebSockets.Client.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Net.WebSockets.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Numerics.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ObjectModel.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Reflection.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Reflection.Extensions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Reflection.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Resources.Reader.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Resources.ResourceManager.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Resources.Writer.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Extensions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Handles.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.InteropServices.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Numerics.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Serialization.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Claims.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.Principal.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Security.SecureString.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ServiceModel.Web.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Text.Encoding.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Text.RegularExpressions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.Overlapped.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.Tasks.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.Thread.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.ThreadPool.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Threading.Timer.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Transactions.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.ValueTuple.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Web.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Windows.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.Linq.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.ReaderWriter.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.Serialization.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.XDocument.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.XmlDocument.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.XmlSerializer.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.XPath.dll
-r:/Users/patrick/.nuget/packages/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll
--target:library
--warn:3
--warnaserror:3239
--fullpaths
--flaterrors
--highentropyva+
--targetprofile:netstandard
--nocopyfsharpcore
--deterministic+
--simpleresolution
obj/Release/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs
obj/Release/netstandard2.0/FsCheck.NUnit.AssemblyInfo.fs
AssemblyInfo.fs
FsCheckPropertyAttribute.fs

The file passed in as -embed:obj/Release/netstandard2.0/FsCheck.NUnit.AssemblyInfo.fs is indeed added to tcConfigB.embedSourceList. But when we create the source doc representation, we do so after resolving it fully into a rooted path. As a result, when the compiler comes to emit the embedded file, it never matches anything in the embed list (because "obj/..." is not equal to "/Users/patrick/.../obj/..."), so the file is not embedded.

Repro steps
Create a new F# project, and dotnet build -d:v it. Search for the string "AssemblyAttributes.fs" in the resulting log and observe that it is passed as --embed:obj/... to fsc. Observe (perhaps by using https://github.com/Smaug123/nuget-metadata/ ) that there are no corresponding embedded sources in the resulting PDB embedded in the DLL. More concretely, the PDB does not contain a debug information handle (e.g. from pdbReader.GetCustomDebugInformation) which has Kind equal to the magic GUID "0E8A571B-6926-466E-B4AD-8AB04611F5FE".

Expected behavior

The resulting PDB has the AssemblyInfo file embedded, as requested with -embed:.

Actual behavior

The AssemblyInfo file is not embedded.

Known workarounds

None.

Context

This is relevant to SourceLink, because I am consistently finding that the obj/Release/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.fs file is not being embedded; but the issue I'm raising here is not the cause of that, because we don't even request that it be embedded by using a -embed flag.

Metadata

Metadata

Assignees

Labels

Area-ProjectsAndBuildMSBuild tasks, project files, framework resolutionBugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions