【问题标题】:ASP.NET vNext - reuse of existing nuget packagesASP.NET vNext - 重用现有的 nuget 包
【发布时间】:2014-10-26 08:22:07
【问题描述】:

虽然我欢迎微软的 ASP.NET vNext 迁移(包括跨平台迁移),但我有一个大问题:现有的 NuGet 包生态系统是否可以重用,或者 vNext 是否需要特定的 NuGet 包? .NET Framework 的特定子集?

【问题讨论】:

    标签: asp.net-core


    【解决方案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 工作)。至于你如何知道哪些会起作用,哪些不会起作用,反复试验。
    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 2014-08-04
    • 2015-03-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2015-03-21
    相关资源
    最近更新 更多