Visual Studio 2017 csproj .NET CORE netstandard2.0 не строится

Я только что установил VS2017 и выполнил одностороннюю миграцию своих основных проектов .NET из формата project.json в новый формат csproj. Я хочу настроить таргетинг на несколько платформ, чтобы я мог создать развертывание, зависящее от платформы, и автономное развертывание, используя меньшую площадь. Я следовал указаниям в документах MS, но когда я включаю netstandard1.6 или netstandard2.0 в TargetFrameworks, я получаю целую кучу Predefined type System.Object is not defined и The type of namespace System could not be found среди прочих, когда пытаюсь собрать проект. Это работало, когда он использовал файл project.json. Мой csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <VersionPrefix>1.0.0.0</VersionPrefix>
    <TargetFrameworks>netcoreapp1.2;netstandard2.0</TargetFrameworks>
    <AssemblyName>App</AssemblyName>
    <OutputType>Exe</OutputType>
    <PackageId>App</PackageId>
    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp1.2' ">1.1.1</RuntimeFrameworkVersion>-->
    <NetStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard2.0' ">1.6.1</NetStandardImplicitPackageVersion>
    <RuntimeIdentifiers>win10-x64;android.21;android21-arm64;osx.10.12;rhel7.4;centos.7-x64;debian8-x64;ubuntu16.10-x64;fedora.26-x64;opensuse.42.1-x64</RuntimeIdentifiers>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute
  </PropertyGroup>

  <ItemGroup>
    <None Remove="App.csproj.vspscc" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
    <PackageReference Include="System.Threading.Thread" Version="4.3.0" />
    <PackageReference Include="Microsoft.NETCore.Runtime.CoreCLR" Version="1.1.0" />
  </ItemGroup>

</Project>

Мой оригинальный проект.json

{
  "version": "1.0.0.0",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "frameworks": {
    "netcoreapp1.2": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        }
      }
    },
    "netstandard2.0": {
      "dependencies": {
        "NETStandard.Library": {
          "version": "1.6.1"
        },
        "System.Threading.Thread": "4.3.0",
        "Microsoft.NETCore.Runtime.CoreCLR": "1.1.0"
      }
    }
  },

  "runtimes": {
    "win10-x64": {}
    "ubuntu.16.10-x64": {},
    "centos.7-x64": {},
    "debian.8-x64": {},
    "fedora.24-x64": {},
    "opensuse.42.1-x64": {},
    "osx10.12-x64" : {}
  }
}

Не уверен, в чем проблема. Я пытаюсь сделать что-то неподдерживаемое? Если у меня есть только netcoreapp1.2, когда я делаю dotnet publish -c Release -r win10-x64, я все равно получаю вывод FDD, а не отдельный исполняемый файл. Я чувствую, что это было намного проще с файлом json... Что я делаю неправильно?


person mhaken    schedule 17.03.2017    source источник
comment
Вы пропустили запятую после "win10-x64": {}   -  person njappboy    schedule 20.08.2018


Ответы (1)


Я получил такое же сообщение об ошибке, когда пакеты Nuget не были восстановлены. Убедились ли вы, что пакеты восстанавливаются правильно и что при запуске «dotnet restore» не появляются ошибки?

person Bebben    schedule 17.03.2017
comment
Итак, я чувствую себя действительно глупо, потому что я мог бы поклясться, что сделал это, но, попробовав это снова этим утром, похоже, что это было так. Спасибо! - person mhaken; 17.03.2017
comment
Большой! Иногда достаточно двух дополнительных глаз! - person Bebben; 18.03.2017