Я пытаюсь проверить, что Protocol Buffers будет работать с новыми портативными средами выполнения из команды ASP.NET и в идеале в большинстве других современных сред. Недавно была создана сборка 3.0.0-alpha4 с использованием profile259, поэтому я ожидал, что некоторые изменения потребуются в некоторых случаях, но я думал, что попробую. Я знаю Oren Novotny's post about targeting .NET Core и ожидаю, что вам нужно внести некоторые изменения в Google.Protobuf nuspec file, но ошибка, с которой я столкнулся, сильно захлебнулась.Невозможно решить проблему с ссылкой на сборку без фреймворков
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
терпит неудачу с:
Error: c:\Users\Jon\Test\Projects\protobuf-coreclr\src\ProtobufTest\Program.cs(9,9): DNX,Version=v4.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'.
Следующие изменения приводят к одной и той же ошибки:
- Явное добавить зависимость к
"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, похоже, не помогает, мне должно быть что-то не хватает :(
я ударил очень похожую ошибку для простой библиотеки классов. Найдено два способа изменения файла project.json, чтобы исправить проблему - http://nodogmablog.bryanhogan.net/2016/01/the-type-is-defined-in-an-assembly-that-is-not-referenced -system-runtime/ – Bryan