我试图验证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,但发生同样的错误 - 同上包括一个包中的
lib\dotnet
目录,以及作为依赖
的步骤,做工作(独立,并没有dependencies
项),但让我困惑:
- 改变
Console.WriteLine
调用刚Console.WriteLine("foo")
(但没有其他的改变) - 改变
duration
变量的类型object
代替Duration
- 卸下协议缓冲器的所有暗示完全,并且代替使用
TimeSpan
或类似 加入以下的
dnx451
部分project.json:"frameworkAssemblies": { "System.Runtime": "" }
最终,我不希望用户必须这样做 - 至少,不是为了Protocol Buffers。我假设这是与我们如何构建协议缓冲区有关,但由于我无法正确理解原因,因此很难修复。我期望如果我能找到一种方法来制作dependencies
条目,那么我可以将该依赖添加到Protocol Buffers本身中,这很好 - 但是由于对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