Ядро .NET выдает несколько ошибок в коде VS

Я импортирую основной проект .NET на компьютер с Windows 10. Это решение с проектом mvc и тестовым проектом. Когда omnisharp загружается, он выдает несколько ошибок.

Первый:

movie-data\imdb_id_retrieval\imdb_id_retrieval.csproj(0,0): Error: Version 2.2.203 of the .NET Core SDK requires at least version 16.0.0 of MSBuild. The current available version of MSBuild is 15.9.21.664. Change the .NET Core SDK specified in global.json to an older version that requires the MSBuild version currently available.

Итак, я обновил Visual Studio, чтобы убедиться, что у меня установлен MSBuild 16.0. Чтобы перепроверить, я побежал

C:\Users\mcdonago\source\repos\movie-data> dotnet msbuild -version
Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

16.0.450.56488
PS C:\Users\mcdonago\source\repos\movie-data>

Все еще есть эта ошибка, когда omnisharp запускается.

Вторая ошибка:

Microsoft.Build.Exceptions.InvalidProjectFileException: The SDK 'Microsoft.NET.Sdk.Web' specified could not be found.  c:\Users\mcdonago\source\repos\movie-data\imdb_id_retrieval\imdb_id_retrieval.csproj

Люди предложили мне получить самый последний SDK.

PS C:\Users\mcdonago\source\repos\movie-data> dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.203
 Commit:    e5bab63eca

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.16299
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.2.203\

Host (useful for support):
  Version: 2.2.4
  Commit:  f95848e524

.NET Core SDKs installed:
  2.2.203 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.2.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.2.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.2.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download
PS C:\Users\mcdonago\source\repos\movie-data>

SDK только один и самый последний. Люди предложили мне изменить ссылку на Project sdk на «Microsoft.Net.Sdk» вместо «Microsoft.Net.Sdk.Web». Это позволяет omnisharp успешно загружать задачу, но тогда у меня возникает множество ошибок, таких как

The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) (CS0246) [imdb_data_retrieval_test]

который, кажется, является еще одним целым беспорядком вопросов.

Обратите внимание, что оба моих проекта успешно компилируются и работают, поэтому я думаю, что это проблема с omnisharp? Кроме того, на моем Linux-компьютере с vs-кодом дома все работает нормально. Любая помощь будет оценена по достоинству. Я несколько часов бился головой и пробовал массу вещей, но не могу заставить vs-код работать с этим решением.

изменить: вот мои файлы .csproj.

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="HtmlAgilityPack" Version="1.9.1" />
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />

  </ItemGroup>

</Project>

--

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.0" />
    <PackageReference Include="moq" Version="4.10.1" />
    <PackageReference Include="nunit" Version="3.11.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.11.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\imdb_id_retrieval\imdb_id_retrieval.csproj" />
  </ItemGroup>

</Project>

person user3736114    schedule 07.05.2019    source источник
comment
Не могли бы вы добавить свой csproj? это может помочь получить больше информации   -  person rekiem87    schedule 07.05.2019
comment
@ rekiem87 Хороший вопрос. Добавлены файлы   -  person user3736114    schedule 07.05.2019


Ответы (2)


Я не знаю, что может быть причиной проблемы, ваша установка выглядит нормально, только некоторые замечания

<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />

В этом нет необходимости, так как Microsoft.AspNetCore.App должен включать все зависимости.

Кроме того, вам следует не имеют версии, указанной в ссылке, поэтому должно выглядеть примерно так

<PackageReference Include="Microsoft.AspNetCore.App" />

Насколько я понимаю, у вашего основного проекта (первого csproj) есть проблемы? Я столкнулся с некоторыми проблемами при изменении версии Net Core, потому что некоторые библиотеки не работают должным образом в новых версиях, вы также можете создать новый проект и добавить одну зависимость за раз, компилируя между изменениями (вы можете сделать это с помощью простого пустого проекта ), поэтому вы можете отказаться, если какая-то библиотека вызывает проблему.

Например, это один из наших csproj

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

    <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
        <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.2.0" />
        <PackageReference Include="Prometheus.Client.AspNetCore" Version="2.2.0" />
        <PackageReference Include="Prometheus.Client.HttpRequestDurations" Version="1.2.2" />
        <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
        <PackageReference Include="System.Net.Primitives" Version="4.3.0" />
    </ItemGroup>

    <ItemGroup>
        <ProjectReference Include="..\vtae.common\vtae.common.csproj" />
        <ProjectReference Include="..\vtae.data\vtae.data.csproj" />
        <ProjectReference Include="..\vtae.integrations\vtae.integrations.csproj" />
    </ItemGroup>

</Project>

Также проверьте, есть ли у вас конфигурационный файл global.json и правильная ли версия

person rekiem87    schedule 07.05.2019

это может быть также в вашем разделе службы app.Start.cs, попробуйте services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

person Assaf Our    schedule 08.05.2019