为什么在我的Web API(ASP.NET v5)项目中添加依赖项不能完全运行?

Jon*_*eet 29 c# asp.net-web-api visual-studio-2015 asp.net-core

我在Windows 8.1上使用Visual Studio 2015 CTP 6.

我正在尝试使用ASP.NET v5编写一个Web API,其新的项目文件格式.我已经将Noda Time v1.3.0的引用添加到我的project.json文件中,Visual Studio中的编辑器选择了它,但是构建过程失败了.

Repro配方,从头开始:

  • 打开VS 2015 CTP 6
  • 在新解决方案中创建新项目:
    • 选择ASP.NET Web应用程序项目模板
    • 在模板对话框中选择"ASP.NET 5 Preview Web API"
  • 构建项目,只是为了确认一切正确
  • 打开project.json,并在(格式错误的)"依赖项"部分,在开头添加一个额外的行(以避免必须添加逗号到另一行):

    "NodaTime": "1.3.0",
    
    Run Code Online (Sandbox Code Playgroud)
  • 打开 Controllers\ValuesController.cs
  • 编辑无参数Get()方法,使正文为:

    return DateTimeZoneProviders.Tzdb.Ids;
    
    Run Code Online (Sandbox Code Playgroud)
    • DateTimeZoneProviders会有红色的曲线,这是合理的 - 我们还没有using指令.
  • 将光标放入DateTimeZoneProviders并点击Ctrl+ .- 你应该被提供" using NodaTime;"作为一个潜在的修复...所以Intellisense(因此Roslyn)肯定知道依赖.
  • 接受修复.曲线会消失 - 一切都很好,对吗?
  • 尝试构建解决方案:你应该得到两个错误,基本上表明的依赖并没有得到解决.

在资源管理器中,如果查看BugDemo解决方案目录,您将找到一个artifacts\obj\BugDemo\Debug\ProjectRawReferences包含"ASP.NET Core 5.0"和"ASP.NET 5.0"目录的目录,这两个目录中都有很多DLL ...但不是Noda Time .

右键单击项目并选择"还原包"并不能解决此问题.

当我使用Project K构建相同的项目时,kpm restore 确实会选择Noda Time,如果你添加一个project.json如下所示的部分,那么k web工作和访问http:// localhost:5001/api/values将显示所有的TZDB时区标识:

"commands": {
  "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001"
},
Run Code Online (Sandbox Code Playgroud)

那么,我做错了什么?或者它只是一个错误?

Ste*_*ary 25

在构建时,请查看"项目"列 - 它注意到失败的构建是"ASP.NET Core 5.0"(而不是"ASP.NET 5.0").在代码编辑器的左上角下拉列表中,您可以选择不同的视图 - 如果选择"ASP.NET Core 5.0",您将看到NodaTime名称空间未定义.

看起来新的ASP.NET项目模板正在创建多目标应用程序,包括aspnet50和aspnetcore50.

ASP.NET 5.0(目前)基于.NET 4.5.x,因此NodaTime portable(net4)满足该平台.ASP.NET Core 5.0基于新的CoreClr(aspnetcore50),并且NodaTime库中没有支持它的二进制文件.

要解决此问题,您可以通过删除"frameworks"下project.json中的"aspnetcore50"条目来删除对应用程序中CoreClr的支持:

"frameworks": {
    "aspnet50": { }
    //"aspnetcore50": { }
},
Run Code Online (Sandbox Code Playgroud)

现在你的应用程序应该只构建针对ASP.NET 5.0而不是CoreClr.

  • 有趣的是,Noda Time 1.3.0确实列在引用中的"ASP.NET Core 5.0"位下 - 没有任何错误或任何迹象.VS肯定可以帮助诊断这个...... (2认同)