我在 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/