2
votes

I just installed VS2017 and did the one way migration of my .NET core projects from the project.json format to the new csproj format. What I want is to target multiple frameworks so I can build a Framework Depedenent Deployment and a Self Contained Deployment using a smaller footprint. I followed the directions on the MS docs, but when I include netstandard1.6 or netstandard2.0 in the TargetFrameworks, I get a whole slew of Predefined type System.Object is not defined and The type of namespace System could not be found among others when I try and build the project. This worked when it was using the project.json file. My csproj is

<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>

My original 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" : {}
  }
}

Not sure what the problem is. Am I trying to do something unsupported? If I have just netcoreapp1.2, when I do a dotnet publish -c Release -r win10-x64 I still get a FDD output, not a standalone executable. I feel like this was way easier with the json file... What am I doing wrong?

1
You are missing a comma after "win10-x64": {}njappboy

1 Answers

4
votes

I got the same error message when the Nuget-packages were not restored. Have you made sure the packages are restored properly, and that no errors appear if you run "dotnet restore"?