Получает ли класс Registry в пакете Microsoft.Win32.Registry пересылку типов в mscorlib.dll при использовании в. NET Framework? - PullRequest
1 голос
/ 16 января 2020

У меня есть . NET Стандартная библиотека 2.0 с зависимостью от пакета Microsoft.Win32.Registry . Вот простой класс:

namespace ClassLibrary4
{
    public class Class1
    {
        public void Test()
        {
            var lm = Microsoft.Win32.Registry.LocalMachine;
        }
    }
}

Когда я ссылаюсь на мою сборку из приложения . NET Framework 4.7.2 , я бы подумал, что класс Registry из пакета Зависимость в моей . NET стандартной библиотеке классов будет перенаправлена ​​по типу в класс Registry, определенный в . NET Framework BCL, внутри mscorlib.dll. Однако, когда я "Go to Definition" в Visual Studio, вот верхняя часть того, что сгенерировано из метаданных:

#region Assembly Microsoft.Win32.Registry, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
// C:\Users\rapperson\.nuget\packages\microsoft.win32.registry\4.7.0\ref\netstandard2.0\Microsoft.Win32.Registry.dll
#endregion

Обратите внимание, что это . NET Стандартная версия DLL, а не mscorlib.dll. Я могу подтвердить, что это та же сборка, которую использует мой код, потому что Microsoft.Win32.Registry.dll помещен в выходную папку моего проекта. NET Framework, и у него та же версия и ключ публикации c:

enter image description here

Мое понимание . NET Стандарт заключается в том, что это просто спецификация , что. NET платформы (например. NET Framework,. NET Core, et c.) должны придерживаться. Так почему же мое . NET Framework приложение не использует свой собственный класс Registry (из mscorlib.dll)?

Вот мой код. NET Framework, хотя он в значительной степени не имеет значения:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var c = new ClassLibrary4.Class1();
            c.Test();
        }
    }
}
...