Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 没有框架程序集,无法解决程序集引用问题_.net_Nuget_Dnx_Nuspec - Fatal编程技术网

.net 没有框架程序集,无法解决程序集引用问题

.net 没有框架程序集,无法解决程序集引用问题,.net,nuget,dnx,nuspec,.net,Nuget,Dnx,Nuspec,我正在尝试验证ASP.NET团队的新的可移植运行时以及理想情况下的大多数其他现代环境是否能够正常工作。3.0.0-alpha4版本是不久前使用profile259创建的,因此我希望在某些情况下需要进行一些更改,但我想我会尝试一下。我意识到,并期望必须对进行一些更改,但我遇到的错误让我难堪 DNX版本:1.0.0-rc1-update1 我当前尝试测试的场景是一个以dnx451为目标的控制台应用程序。我有一个非常简单的示例应用程序: using Google.Protobuf.WellKnownT

我正在尝试验证ASP.NET团队的新的可移植运行时以及理想情况下的大多数其他现代环境是否能够正常工作。3.0.0-alpha4版本是不久前使用profile259创建的,因此我希望在某些情况下需要进行一些更改,但我想我会尝试一下。我意识到,并期望必须对进行一些更改,但我遇到的错误让我难堪

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恢复
工作正常<代码>dnx运行失败,原因是:

错误:c:\Users\Jon\Test\Projects\protobuf coreclr\src\ProtobufTest\Program.cs(9,9):DNX,Version=v4.5.1错误CS0012:在未引用的程序集中定义了类型“Object”。必须添加对程序集“System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”的引用

以下更改会导致相同的错误:

  • 显式地将依赖项添加到框架的
    依赖项部分的
    “System.Runtime”:“4.0.0”
  • 显式地将依赖项添加到框架的
    依赖项部分的
    “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
    目录以及依赖项
确实有效的步骤(独立,并且没有
依赖项
条目),但让我感到困惑:

  • Console.WriteLine
    调用更改为仅
    Console.WriteLine(“foo”)
    (但无其他更改)
  • 持续时间
    变量的类型更改为
    对象
    ,而不是
    持续时间
  • 完全删除协议缓冲区的所有提示,而是使用
    TimeSpan
    或类似方法
  • 将以下内容添加到
    dnx451
    部分的project.json中:

    "frameworkAssemblies": {
      "System.Runtime": ""
    }
    
最终,我不希望用户必须这样做——至少,不是为了协议缓冲区。我假设这与我们如何构建协议缓冲区有关,但由于我无法正确理解原因,因此很难修复


我希望,如果我能找到一种方法使
依赖项
条目起作用,那么我就可以将该依赖项添加到协议缓冲区本身,这很好——但由于project.lock文件中的System.Runtime v4.0.0依赖项似乎没有帮助,我一定缺少了一些东西:(

在我看来,您的问题之所以存在,只是因为您选择了控制台应用程序而不是“ASP.NET Web应用程序”/“ASP.NET 5模板”/“空”。我将简单的测试用法设置为空模板,添加了
“Google.Protobuf”:“3.0.0-alpha4”
来自NuGet,最后修改了
Startup.cs
,使其使用
Google.Protobuf.WellKnownTypes

  • 使用Google.Protobuf.WellKnownTypes添加了
  • 添加了
    var duration=new duration{Seconds=100,Nanos=5555};
    Configure
  • wait context.Response.WriteAsync(“你好!”);
    修改为
    wait context.Response.WriteAsync(duration.ToString());
Startup.cs的最终代码:

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using Google.Protobuf.WellKnownTypes;

namespace ProtobufTest
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app)
        {
            app.UseIISPlatformHandler();

            var duration = new Duration { Seconds = 100, Nanos = 5555 };

            app.Run(async context =>
            {
                await context.Response.WriteAsync(duration.ToString());
            });
        }

        // Entry point for the application.
        public static void Main(string[] args) => WebApplication.Run<Startup>(args);
    }
}
可以从下载工作项目。

我对这行加了评论

//[assembly: Guid("b31eb124-49f7-40bd-b39f-38db8f45def3")]
AssemblyInfo.cs
中,没有不必要的引用
“Microsoft.CSharp”
,其中有许多其他引用。
project.json
包含在演示项目中:

{
...
“依赖项”:{
“Google.Protobuf”:“3.0.0-alpha4”
},
“框架”:{
“dnx451”:{},
“dnxcore50”:{
“依赖项”:{
“系统控制台”:“4.0.0-beta-23516”
}
}
}
}
顺便说一句,包括
“System.Console”:
中的“4.0.0-beta-23516”
“dnxcore50”
部分
“frameworks”
是必需的,因为
Console
命名空间(用于
Console.WriteLine
)存在于
DNX 4.5.1
mscorlib
中。如果试图添加
“System.Console:“4.0.0-beta-23516”
在常见依赖项级别上,一个错误是从文本开始的

错误CS0433“System.Console”和“System.Console”中都存在“Console”类型, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'和 'mscorlib,版本=4.0.0.0,区域性=中性, PublicKeyToken=b77a5c561934e089'控制台AP3.DNX 4.5.1

更新2:可以更换线路

Console.WriteLine("{0}.{1:D4}s", duration.Seconds, duration.Nanos);

只要使用
Console.WriteLine(duration);
var str=duration.ToString();
就会产生您描述的错误

更新3:我验证了用于格式化的代码
duration.ToString()
调用。似乎代码
duration.ToString()
((对象)duration)的作用完全相同。对于
WellKnownTypes
类型(如
duration

我认为最新的评论很重要。所描述的问题只存在于dnx451(或dnx452或dnx46)中。如果要删除这些行

"dnx451": { },
“frameworks”
部分
project.json
中,程序将仅为DNX Core 5.0编译(Console.WriteLine((object)duration);
"dnx451": { },
<package>
  <metadata>
    ...
    <frameworkAssemblies>
      <frameworkAssembly assemblyName="System.Runtime" targetFramework="net45" />
    </frameworkAssemblies>
  </metadata>
  ...
</package>