c# - 为什么在我的 Web API (ASP.NET v5) 项目中添加依赖项无法完全正常工作?

标签 c# asp.net-web-api asp.net-core visual-studio-2015

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

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

重制配方,从头开始:

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

    "NodaTime": "1.3.0",
    
  • 打开 Controllers\ValuesController.cs
  • 编辑无参数 Get() 方法,使主体为:

    return DateTimeZoneProviders.Tzdb.Ids;
    
    • DateTimeZoneProviders 会有红色波浪线,这是合理的 - 我们还没有 using 指令。
  • 将光标放在 DateTimeZoneProviders 中,然后按 Ctrl+ - 您应该会看到“using NodaTime; “作为一个潜在的解决方案……因此 Intellisense(以及 Roslyn)肯定知道这种依赖性。
  • 接受修复。波浪线会消失 - 一切都很好,对吧?
  • 尝试构建解决方案:您应该会收到两个错误,基本上表明依赖关系尚未得到解决。

在资源管理器中,如果您查看 BugDemo 解决方案目录,您将找到一个包含“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 时区 ID:

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

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

最佳答案

构建时,检查“项目”列 - 它指出失败的构建是“ASP.NET Core 5.0”(而不是“ASP.NET 5.0”)。在代码编辑器的左上角下拉列表中,您可以选择不同的 View - 如果您选择“ASP.NET Core 5.0” View ,您将看到 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 构建。

关于c# - 为什么在我的 Web API (ASP.NET v5) 项目中添加依赖项无法完全正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886638/

相关文章:

javascript - 如何将 Javascript 字典传递给 Controller ​​,其中 C# 字典值是一个对象

c# - Xamarin-遍历Android设备上的所有音频文件

c# - 在 .NET Core 的 ConfigureService-Methods(特别是 IApplicationLifetime)中使用 DI

c# - float 与双重性能

c# - 翻译 DataGrid MouseEvent 所以我在 View 的代码隐藏中没有代码

asp.net-mvc - 我应该如何实现 Nlog 记录器以减少复制/粘贴的单调乏味?

c# - ASP.Net Core 2.0 中的自动映射器

asp.net-core - 如何让字体很棒的图标显示在 Asp.Net Core Identity 的帐户管理页面上?

c# - 从.net core 2.1中的单例服务注入(inject)作用域服务

forms-authentication - 将表单例份验证与 Web API 结合使用