Не удалось найти пространство имен Microsoft.Win32 - PullRequest
0 голосов
/ 18 мая 2018

Я установил Visual Studio вчера.Я хотел бы посмотреть, какая версия .NET Framework установлена ​​вместе с Visual Studio, поэтому я следовал этому коду от Microsoft .(прокрутите немного вниз для кода).Я открыл новый проект Visual C # с помощью «Консольного приложения (.NET Core)» и скопировал в него указанный код.

using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
    public static void Main()
    {
        GetDotNetVersion.Get45PlusFromRegistry();
    }

    private static void Get45PlusFromRegistry()
    {
        const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

        using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
        {
            if (ndpKey != null && ndpKey.GetValue("Release") != null)
            {
                Console.WriteLine(".NET Framework Version: " + CheckFor45PlusVersion((int)ndpKey.GetValue("Release")));
            }
            else
            {
                Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
            }
        }
    }

    // Checking the version using >= will enable forward compatibility.
    private static string CheckFor45PlusVersion(int releaseKey)
    {
        if (releaseKey >= 461808)
            return "4.7.2 or later";
        if (releaseKey >= 461308)
            return "4.7.1";
        if (releaseKey >= 460798)
            return "4.7";
        if (releaseKey >= 394802)
            return "4.6.2";
        if (releaseKey >= 394254)
            return "4.6.1";
        if (releaseKey >= 393295)
            return "4.6";
        if (releaseKey >= 379893)
            return "4.5.2";
        if (releaseKey >= 378675)
            return "4.5.1";
        if (releaseKey >= 378389)
            return "4.5";
        // This code should never execute. A non-null release key should mean
        // that 4.5 or later is installed.
        return "No 4.5 or later version detected";
    }
}
// This example displays output like the following:
//       .NET Framework Version: 4.6.1

Однако в редакторе «RegistryKey» выдает ошибку: «Пространство имен не может быть найдено ".Вторая строка 'using Microsoft.Win32;'серый, как если бы он не вызывался в коде.

Когда я смотрю на панель обозревателя решений в Visual Studio, я могу перечислить зависимости.Я не вижу MicrosoftWin32.dll, но я вижу mscorlib.dll.Я где-то читал, что там можно найти пространство имен Microsoft.Win32?

Может кто-нибудь подсказать, как решить эту проблему?Где я могу найти пространство имен Microsoft.Win32?Почему он не доступен в этом стандартном проекте?

1 Ответ

0 голосов
/ 18 мая 2018

Если вы используете netcore, вам нужно добавить пакет Microsoft.Win32.Registry:

Ваш проект:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Win32.Registry" Version="4.4.0" />
  </ItemGroup>

</Project>

Результат:

result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...