Консольное приложение .Net с project.json: тип определен в сборке, на которую нет ссылок

Я пытаюсь создать простое консольное приложение .Net со структурой project.json, используя опцию VS2015 Console Application (Package), используя внешний пакет NuGet, и я получаю справочные ошибки.

Программа.cs:

using System.Net.Http;
using System.Threading.Tasks;
using Nito.AsyncEx;

namespace AsyncTest
{
    public class Program
    {
        public static void Main(string[] args)
        {
            AsyncContext.Run(() => MainAsync(args));
        }

        public static async void MainAsync(string[] args)
        {
            var urlContents = await AccessTheWebAsync();
        }

        static async Task<int> AccessTheWebAsync()
        {
            HttpClient client = new HttpClient();

            Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");

            string urlContents = await getStringTask;

            return urlContents.Length;
        }

    }
}

проект.json:

{
  "version": "1.0.0-*",
  "description": "AsyncTest Console Application",
  "authors": [ "ricsmania" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Nito.AsyncEx": "3.0.1"
  },

  "commands": {
    "AsyncTest": "AsyncTest"
  },

  "frameworks": {
    "dnx451": {
      "dependencies": {
        "Microsoft.Net.Http": "2.2.22",
        "System.Runtime": "4.0.0"
      }
    }
  }
}

И ошибки:

DNX 4.5.1 error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
DNX 4.5.1 error CS0012: The type 'Action' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
DNX 4.5.1 error CS0012: The type 'Func<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Если я создаю «традиционное» консольное приложение без project.json, используя тот же самый код Program.cs, он работает нормально.

Окружающая среда:

Windows 10 Pro
Visual Studio 2015 Professional 14.0.25123.00 Update 2
.Net 4.6.1
DNX 1.0.0-rc2-20221

РЕДАКТИРОВАТЬ: я пробовал восстанавливать пакеты и очищать/перестраивать, а также создавать проект с нуля, но это не помогло.

Я что-то не так делаю или это баг?


person Ricardo Smania    schedule 10.05.2016    source источник
comment
Пробовали ли вы сначала восстановить пакеты (через dnu restore IIRC)?   -  person Martin Klinke    schedule 10.05.2016
comment
@MartinKlinke да, я сделал это как внутри VS, так и с помощью CLI (который в настоящее время является восстановлением dotnet), но спасибо за предложение.   -  person Ricardo Smania    schedule 10.05.2016


Ответы (1)


Я узнал решение. Мне пришлось добавить System.Runtime внутри frameworkAssemblies, а не зависимостей. Рабочий проект.json:

{
  "version": "1.0.0-*",
  "description": "AsyncTest Console Application",
  "authors": [ "ricardo.smania" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Nito.AsyncEx": "3.0.1"
  },

  "commands": {
    "AsyncTest": "AsyncTest"
  },

  "frameworks": {
    "dnx451": {
      "dependencies": {
        "Microsoft.Net.Http": "2.2.22"
      },
      "frameworkAssemblies": {        
        "System.Runtime": "4.0.0.0",
        "System.Threading.Tasks": "4.0.0.0"
      }
    }
  }
}
person Ricardo Smania    schedule 18.05.2016