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

Why does adding a dependency in my Web API (ASP.NET v5) project not work fully?

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

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

重新制作配方,从头开始:

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

右键单击项目并选择 "Restore packages" 无法解决此问题。

当我使用 Project K 构建同一个项目时,kpm restore 选择 Noda Time,并且如果您将一个部分添加到 project.json下面,然后 k web 工作并且访问 http://localhost:5001/api/values 将向您显示所有 TZDB 时区 ID:

"commands": {
  "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001"
},

所以,我做错了什么?或者这只是一个错误?

构建时,检查 "Project" 列 - 它指出失败的构建是 "ASP.NET Core 5.0"(而不是 "ASP.NET 5.0")。在代码编辑器的左上角下拉菜单中,您可以选择不同的视图 - 如果您 select "ASP.NET Core 5.0" 视图,您会看到 NodaTime 命名空间未定义。

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

ASP.NET 5.0(当前)基于 .NET 4。5.x,因此 NodaTime 便携式 (net4) 满足该平台。 ASP.NET Core 5.0 基于新的 CoreClr (aspnetcore50),NodaTime 库中没有支持它的二进制文件。

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

"frameworks": {
    "aspnet50": { }
    //"aspnetcore50": { }
},

现在您的应用应该只针对 ASP.NET 5.0 而不是 CoreClr 构建。