我正在尝试验证Protocol Buffers是否能够与ASP.NET团队的新便携式运行环境以及其他大多数现代环境一起使用。3.0.0-alpha4版本是一段时间以前使用profile259创建的,因此在某些情况下需要进行一些更改,但是我想尝试一下。我知道Oren Novotny关于针对.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
失败并显示以下错误:Error: c:\Users\Jon\Test\Projects\protobuf-coreclr\src\ProtobufTest\Program.cs(9,9): DNX, Version=v4.5.1 error CS0012: 类型“Object”在未引用的程序集中定义。必须向程序集“System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”添加引用。进行以下更改会导致相同的错误:- 在框架的
dependencies
部分明确添加对"System.Runtime": "4.0.0"
的依赖- 在框架的
dependencies
部分明确添加对"System.Runtime": "4.0.0-beta-23109"
、4.0.10-beta-*
、4.0.20-beta-*
和4.0.21-beta*
的依赖。- 在NuGet包中(本地)添加对
System.Runtime
的依赖项并针对其重新构建 - 更新了project.lock.json
以包括System.Runtime v4.0.0,但仍会出现相同的错误。- 同上,还包括
lib\dotnet
目录和依赖项以下步骤可以正常工作(独立进行且没有
dependencies
条目),但让我感到困惑:- 将
Console.WriteLine
调用更改为Console.WriteLine("foo")
(除此之外没有进行任何更改)- 将
duration
变量的类型更改为object
而不是Duration
- 完全删除与协议缓冲区有关的所有提示,并改用
TimeSpan
或类似内容- 在
dnx451
部分的project.json中添加以下内容:"frameworkAssemblies": {
"System.Runtime": ""
}
最终,我不希望用户为Protocol Buffers而这样做 - 至少不是为了这个。我假设这与我们如何构建协议缓冲区有关,但由于我没有彻底理解原因,很难解决。
我期望如果我能找到一种让 dependencies
条目正常工作的方法,那么我就可以将该依赖项添加到 Protocol Buffers 本身中,这是没问题的 - 但似乎在 project.lock 文件中具有 System.Runtime v4.0.0 的依赖关系并不能帮助我,所以我肯定错过了什么 :(