ASP.NET vNext - 重用现有的 nuget 包
Posted
技术标签:
【中文标题】ASP.NET vNext - 重用现有的 nuget 包【英文标题】:ASP.NET vNext - reuse of existing nuget packages 【发布时间】:2014-10-26 08:22:07 【问题描述】:虽然我欢迎微软的 ASP.NET vNext 迁移(包括跨平台迁移),但我有一个大问题:现有的 NuGet 包生态系统是否可以重用,或者 vNext 是否需要特定的 NuGet 包? .NET Framework 的特定子集?
【问题讨论】:
【参考方案1】:您绝对可以使用现有的 NuGet 包。归根结底,这完全取决于您所针对的框架。例如,如果您的应用程序以aspnet50
为目标,您可以愉快地使用与 NET 4.5 及更高版本兼容的现有 NuGet 包(取决于您安装的 .NET 框架版本)。这是一个示例 project.json 文件,它指示来自 nuget.org 的 MongoDB .NET 客户端消耗:
"name": "AspNet.Identity.MongoDB",
"version": "1.0.0-beta1",
"dependencies":
"Microsoft.AspNet.Identity": "3.0.0-*",
"mongocsharpdriver": "1.9.2"
,
"aspnet50":
"dependencies":
由于我只有一个框架(aspnet50),即使我有mongocsharpdriver它也能顺利运行 所有框架的参考。
您可以使用这种方法来轻松迁移到 ASP.NET vNext(就像我对 MongoDB ASP.NET Identity implementation 所做的那样),因为 MongoDB .NET Client 等库可能需要一些时间才能与 aspnetcore50 兼容。
如果我针对多个框架,我将只为该框架安装特定的包。这是一个例子:
"dependencies":
"Kestrel": "1.0.0-*",
"Microsoft.AspNet.Mvc": "6.0.0-*",
"Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-*",
"Microsoft.AspNet.Server.IIS": "1.0.0-*",
"Microsoft.AspNet.Server.WebListener": "1.0.0-*",
"Microsoft.AspNet.StaticFiles": "1.0.0-*",
,
"commands":
"web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001",
"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5000"
,
"frameworks":
"aspnet50":
"dependencies":
"Microsoft.Framework.DependencyInjection.Autofac": "1.0.0-*",
"Microsoft.Framework.ConfigurationModel.Json": "1.0.0-*"
,
"aspnetcore50":
"dependencies":
,
"webroot": "wwwroot"
请注意,Microsoft.Framework.DependencyInjection.Autofac 包仅为 aspnet50 安装。当您在 aspnetcore50 下编译应用程序时,它将不可用。当然,使用这种方法,您需要ifdef 才能获得胜利,具体取决于here 所做的用例。
【讨论】:
问题是(我认为)vnext 针对 Microsoft.Net 框架和 Mono .Net 框架。只有将在两者上运行的包是可重用的。因此,对于依赖于例如 system.web 的软件包将不起作用。我们如何知道哪些包可以工作,哪些包不能工作...所以大多数包都需要添加另一个目标...但是好的,.net 3.5 和 .net 4 也是如此。 你提到的很多事情都是不真实的。你和你的依赖一样兼容。如果您的依赖项不在单声道上运行,那么您将不会,这并不意味着它必须工作才能使用它。如果您的包依赖于 System.Web,那么它可能无法工作,但它可能取决于它如何使用它(例如 HttpUtility 工作)。至于你如何知道哪些会起作用,哪些不会起作用,反复试验。以上是关于ASP.NET vNext - 重用现有的 nuget 包的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET vNext 中使用 Ninject 时出现编译器错误 CS0246(未找到类型或命名空间)