Я пытаюсь проверить, что Буферы протоколов будут работать с новыми переносимыми сеансами работы из команды ASP.NET и, в идеале, большинства других современных сред. Недавно была создана сборка 3.0.0-alpha4 с использованием profile259, поэтому я ожидал, что некоторые изменения потребуются в некоторых случаях, но я думал, что попробую. Я знаю сообщение "Орен Новотный" о таргетинге на .NET Core и должен внести некоторые изменения в Google. Файл Protobuf nuspec, но ошибка, с которой я сталкиваюсь, меня озадачила.
Версия DNX: 1.0.0-rc1-update1
Сценарий, который я пытаюсь проверить, - это приложение для консольного приложения dnx451. У меня очень простое примерное приложение:
using Google.Protobuf.WellKnownTypes;
using System;
public class Program
{
public static void Main(string[] args)
{
Duration duration = new Duration { Seconds = 100, Nanos = 5555 };
Console.WriteLine(duration);
}
}
... и крошечный project.json
:
{
"compilationOptions": { "emitEntryPoint": true },
"dependencies": { "Google.Protobuf": "3.0.0-alpha4" },
"frameworks": {
"dnx451": { }
}
}
Обратите внимание, что я даже не использую dnxcore*
здесь - по иронии судьбы, я получил это, чтобы работать без проблем.
dnu restore
работает нормально; dnx run
не удается:
Ошибка: c:\Users\Jon\Test\Projects\protobuf-coreclr\src\ProtobufTest\Program.cs(9,9): DNX, версия = v4.5.1 ошибка CS0012: Тип "Объект" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку "System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a".
Следующие изменения приводят к той же ошибке:
- Явное добавление зависимости
"System.Runtime": "4.0.0"
в разделеdependencies
для фреймворка - Явное добавление зависимости
"System.Runtime": "4.0.0-beta-23109"
в разделеdependencies
для фреймворка, а также для4.0.10-beta-*
,4.0.20-beta-*
и4.0.21-beta*
. - Добавление зависимостей к
System.Runtime
в пакете NuGet (локально) и восстановление по сравнению с этим -project.lock.json
было обновлено, чтобы включить System.Runtime v4.0.0, но произошла такая же ошибка - Ditto, включая каталог
lib\dotnet
в пакете, а также зависимости
Шаги, которые работали (независимо и без записей dependencies
), но путают меня:
- Изменение вызова
Console.WriteLine
толькоConsole.WriteLine("foo")
(но никаких других изменений) - Изменение типа переменной
duration
наobject
вместоduration
- Полностью удалить все намеки на буферы протокола и вместо этого использовать
TimeSpan
или аналогичные -
Добавление следующего в project.json в разделе
dnx451
:"frameworkAssemblies": { "System.Runtime": "" }
В конечном счете, я не хочу, чтобы пользователи должны были это делать - по крайней мере, не для протокольных буферов. Я предполагаю, что это связано с тем, как мы создаем протокольные буферы, но поскольку я не понимаю причину правильно, ее трудно исправить.
Я ожидаю, что если бы я смог разработать способ ввода записи dependencies
, я мог бы затем добавить эту зависимость в сами буферы протоколов, что было бы неплохо, но как имеющее зависимость от System.Runtime v4.0.0 в файле project.lock, похоже, не помогает, я должен что-то пропустить: (