Я пытаюсь проверить, что Protocol Buffers будет работать с новыми переносимыми средами выполнения от команды ASP.NET и, в идеале, с большинством других современные среды. Сборка 3.0.0-alpha4 была создана некоторое время назад с использованием профиля 259, поэтому я ожидал, что в некоторых случаях потребуются некоторые изменения, но я решил попробовать. Мне известно о сообщении Орена Новотны о нацеливании на .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,Version=v4.5.1 CS0012: тип «Объект» определен в сборке что не упоминается. Вы должны добавить ссылку на сборку «System.Runtime, версия = 4.0.0.0, культура = нейтральная, 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, но возникла та же ошибка. - То же самое, включая каталог
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 файл не помогает, я что-то упускаю :(