为什么在我的 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 中的编辑器选择了它,但构建过程失败了。
重新制作配方,从头开始:
- 打开 VS 2015 CTP 6
- 在新解决方案中创建新项目:
- Select ASP.NET Web 应用程序项目模板
- Select "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" 目录的 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 构建。
我在 Windows 8.1 上使用 Visual Studio 2015 CTP 6。
我正在尝试使用 ASP.NET v5 及其新项目文件格式编写 Web API。我在我的 project.json
文件中添加了对 Noda Time v1.3.0 的引用,Visual Studio 中的编辑器选择了它,但构建过程失败了。
重新制作配方,从头开始:
- 打开 VS 2015 CTP 6
- 在新解决方案中创建新项目:
- Select ASP.NET Web 应用程序项目模板
- Select "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" 目录的 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 构建。