Как исправить «Сборка анализатора ссылается на версию компилятора 4.7.0.0, которая более новая, чем текущая версия 4.6.0.0».

Сегодня утром я открыл свой проект Visual Studio 2022 и больше не могу его запустить из-за следующей ошибки:

CS9057 Сборка анализатора 'C:\ProgramFiles\dotnet\sdk\8.0.100-preview.6.23330.14\Sdks\Microsoft.NET.Sdk.Razor\source-generators\Microsoft.NET.Sdk.Razor.SourceGenerators.dll' ссылается на версию компилятора «4.7.0.0», которая более новая, чем текущая версия «4.6.0.0».

в настоящее время я используюMicrosoft Visual Studio Community 2022 (64-bit) Version 17.6.5

Мой файл проекта:

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

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>     
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="6.0.20" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="6.0.16" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.16" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.16" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="6.0.20" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.16" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.16" />
    <PackageReference Include="MudBlazor" Version="6.2.3" />
  </ItemGroup>

</Project>

Я недавно установилMicrosoft Visual Studio Community 2022 (64-bit) Version 17.7.0 Preview 3.0что включает в себя.NET 8 SDK. Похоже, именно это и является причиной конфликта ссылок анализатора.

Мне не удалось найти документацию, которая помогла бы мне изменить ссылки на мой анализатор обратно на правильную версию, и, похоже, нет никакого способа сделать это вNuget Package ManagerилиReference Manager.

Другие мои проекты .NET 6 работают, но не этот.

Я попробовал очистить проект, удалить папки obj и bin и даже удалить папку vs.

вывод изdotnet --list-sdks:

3.0.103 [C:\Program Files\dotnet\sdk] 3.1.426 [C:\Program Files\dotnet\sdk] 7.0.306 [C:\Program Files\dotnet\sdk] 7.0.400-preview.23330.10 [ C:\Program Files\dotnet\sdk] 8.0.100-preview.6.23330.14 [C:\Program Files\dotnet\sdk]

Выход изdotnet --version:

8.0.100-превью.6.23330.14

Как мне изменить ссылки анализатора обратно на .NET 6? или как лучше всего решить эту проблему?

6 ответов

Из Выберите версию .NET для использования документа:

SDK использует последнюю установленную версию.

Команды SDK включают в себяdotnet newиdotnet run. Интерфейс командной строки .NET должен выбирать версию SDK для каждой команды dotnet. По умолчанию используется последняя версия SDK, установленная на компьютере, даже если:

  • Проект ориентирован на более раннюю версию среды выполнения .NET.
  • Последняя версия .NET SDK — это предварительная версия.

Попробуйте добавить файл global.json в корень проекта:

Файл global.json позволяет вам определить, какая версия .NET SDK используется при запуске команд .NET CLI. Выбор версии .NET SDK не зависит от указания версии среды выполнения, на которую нацелен проект. Версия .NET SDK указывает, какая версия .NET CLI используется.

Что-то вроде:

      {
  "sdk": {
    "version": "6.0.0",
    "rollForward": "latestMinor"
  }
}

Из-за нехватки времени я удалил предварительную версию VS 2022 для .NET 8 и .NET 8 SDK, а чтобы полностью избавиться от проблемы, мне пришлось затем удалить текущий .NET SDK и переустановить его. Теперь проект собирается и снова запускается.

Мы установим .NET 8 снова позже, когда будут устранены эти ошибки.

Я не принимаю этот ответ, поскольку он не решает проблему.

Для решения подобных вопросов:

  1. Установите последнюю версию пакета SDK dotnet для версии .NET, используемой в вашем проекте. Его можно скачать здесь: https://dotnet.microsoft.com/en-us/download/visual-studio-sdks .
  2. Обновите свою визуальную студию, нажав «Справка» -> «Проверить наличие обновлений в Visual Studio».
  3. Перезагрузите машину
  4. (Очистить и) перестроить свой проект

Здесь есть несколько решений, которые вы можете попробовать:

  1. Обновите Visual Studio 2022 до версии 17.7.1.
  2. Установите релизную версию SDK 7.0.400, а не предварительную.
  3. Убедитесь, что вы используете последнюю версию Visual Studio 2022 Preview (17.8.0 Preview 1).
  4. Вместо этого установите SDK 7.0.307 и настройте его с помощью файла global.json.

№ 4 — это то, что сработало для меня в Azure DevOps Pipelines. Предполагается, что Microsoft выпустит там исправление, но оно еще не запущено в производство.

Эта ошибка возникла в наших конвейерах сборки, поскольку они содержали задачу UseDotNet@2, предназначенную для конкретной версии пакета SDK .net, но фактическая сборка выполняла VSBuild@1. Задача VSBuild@1 не учитывала задачу CLI UseDotNet@2 dotnet и просто компилировалась с использованием последней версии SDK на сервере сборки, которая на данный момент является .net 7 вместо .net 6, запрошенной задачей @UseDotNet@2. Мы переключили задачу VSBuild@1 на задачу публикации DotNetCoreCLI@2, и все заработало как положено.

У меня была эта проблема в выпускной версии VisualStudio 2022 и .NET 8 (v8.0.100-preview.6). Чтобы решить эту проблему, мне пришлось полностью удалить .NET 8, очистить проект и перезапустить Visual Studio.

Другие вопросы по тегам