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(未找到类型或命名空间)

依赖注入。为 ASP.NET vNext 做准备

从 ASP.NET vNext beta5 移动到 beta7 后 JWT Bearer 令牌身份验证错误

ASP.NET 5 (vNext) - 获取配置设置

ASP.NET 5 (vNext) - 获取配置设置

ASP.NET 5 (vNext) 中的身份验证