Skip to content

Three referenced DLLs are missing PDBs on the Microsoft symbols server #4885

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

Open
Tanya-Solyanik opened this issue Jan 28, 2025 · 2 comments · Fixed by #4884 · May be fixed by #4900 or #4899
Open

Three referenced DLLs are missing PDBs on the Microsoft symbols server #4885

Tanya-Solyanik opened this issue Jan 28, 2025 · 2 comments · Fixed by #4884 · May be fixed by #4900 or #4899
Milestone

Comments

@Tanya-Solyanik
Copy link
Member

When you publish a project that references version 8.0.12 of the Microsoft.Windows.Compatibility NuGet, it includes three DLLs (System.Data.SqlClient.dll, System.Diagnostics.EventLog.Messages.dll, and System.ServiceModel.dll) which no longer have debug symbols available on the Microsoft symbol server (https://msdl.microsoft.com/download/symbols). The latest 8.0.* version should only reference DLLs with debug symbols available.

To reproduce this:

  • Create PublishNet8.csproj:
<Project Sdk="Microsoft.NET.Sdk">
 
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>
 
    <ItemGroup>
        <PackageReference Include="Microsoft.Windows.Compatibility" Version="8.0.12" />
    </ItemGroup>
 
</Project>
  • Create Program.cs:
class Program
{
    static void Main()
    {
        System.Console.WriteLine("Hello, World!");
    }
}
  • Publish the project using this command line: dotnet publish PublishNet8.csproj --self-contained -r win-x64
  • Install the debugging tools for Windows so you can use symchk.exe to download symbols. (https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/using-symchk)
  • Run these commands while in the "bin\Release\net8.0\win-x64\publish" folder:
    • symchk.exe /s SRV*https://msdl.microsoft.com/download/symbols /if System.Data.SqlClient.dll /oc . /v
    • symchk.exe /s SRV*https://msdl.microsoft.com/download/symbols /if System.Diagnostics.EventLog.Messages.dll /oc . /v
    • symchk.exe /s SRV*https://msdl.microsoft.com/download/symbols /if System.ServiceModel.dll /oc . /v

These three binaries have missing symbols on the symbol server, so this command will fail to find their symbols.

System.Data.SqlClient.dll is in the System.Data.SqlClient NuGet. It could be upgraded from 4.8.6 to 4.9.0. I verified that version 4.9.0 has symbols available.

System.Diagnostics.EventLog.Messages.dll is in the System.Diagnostics.EventLog NuGet. The PDB for System.Diagnostics.EventLog.Messages.dll is missing even for the latest version of this NuGet (9.0.1), so this needs to be fixed at the source of that NuGet.

System.ServiceModel.dll is in the System.ServiceModel.Primitives NuGet. The latest version of this NuGet (8.1.1) no longer includes System.ServiceModel.dll, so upgrading would avoid the issue of referencing a DLL without symbols.

@Tanya-Solyanik
Copy link
Member Author

From: Eric St. John <[email protected]>
Sent: Monday, January 27, 2025 3:44 PM
To: Matt Mitchell (.NET) <[email protected]>; Merrie McGaw <[email protected]>; Loni Tra <[email protected]>; Phil Deets <[email protected]>; Jeremy Kuhne <[email protected]>
Cc: Viktor Hofer <[email protected]>
Subject: RE: Missing PDBs for binaries in Microsoft.Windows.Compatibility

System.Diagnostics.EventLog.Messages.dll is a resource dll. It doesn’t need / require a PDB as it contains no code, however we do build it with the C# compiler and it looks like it does produce one. I see a change we can make to the build system to package the PDB for this dll. I opened Include PDB for all TfmRuntimeSpecificPackageFile by ericstj · Pull Request #111879 · dotnet/runtime. If this is important to you we can backport this change to servicing.

We transferred Microsoft.Windows.Compatibility up the stack to WindowsDesktop a few releases ago along with System.Drawing. That said – it’s not really the problem. The customer is calling out requests to update a couple of its’ external dependencies. SqlClient - which has been owned by the SQL team and ServiceModel - which is owned by WCF. I think both of those requests are reasonable, but wether or not they are safe to do and in what branch depends on the owners of those. In the past we’ve worked with them to get approval / sign off. I created a PR Update Windows.Compatibility external packages by ericstj · Pull Request #4884 · dotnet/windowsdesktop to ask what they think about versions / backporting.
Eric

@mconnew
Copy link
Member

mconnew commented Jan 28, 2025

@Tanya-Solyanik , the 8.1.1 version of System.ServiceModel.Primitives definitely does contain a System.ServiceModel.dll assembly. Check the lib/net8.0 folder in the package.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment