【问题标题】:How to create and use ASP.NET vNext class library NuGet package?如何创建和使用 ASP.NET vNext 类库 NuGet 包?
【发布时间】:2014-12-06 04:02:23
【问题描述】:

我想为我的 ASP.NET vNext 类库创建一个 NuGet 包。我该怎么做,一步一步?我知道有kpm build,但我找不到关于在哪里下载 kpm 等的指南。

另外,在获得它的 NuGet 包(或 DLL)后,如何将其从本地计算机添加到我的 vNext 项目?

【问题讨论】:

    标签: nuget-package asp.net-core dnx


    【解决方案1】:

    Kpm 是新 KRuntime 的包管理器。可以在the aspnet Home repo 上找到有关如何在您的开发人员机器上安装 KRuntime 命令行实用程序的说明。设置好 kvm 和 KRuntime 版本后,您也可以使用 kpm。

    现在您可以在您的类库项目位置运行kpm build。输出应该是这样的:

    kpm build src\ClassLibrary1\
    ClassLibrary1 -> C:\Users\username\Documents\Visual Studio 14\Projects\WebApplication1\src\ClassLibrary1\bin\Debug\ClassLibrary1.1.0.0.nupkg
    ClassLibrary1 -> C:\Users\username\Documents\Visual Studio 14\Projects\WebApplication1\src\ClassLibrary1\bin\Debug\ClassLibrary1.1.0.0.symbols.nupkg
    
    Build succeeded.
        0 Warnings(s)
        0 Error(s)
    
    Time elapsed 00:00:01.7556414
    

    添加对类项目的引用的最简单方法是在 project.json 中进行,假设您在同一个解决方案中拥有它。这是来自 Web 应用程序的示例 project.json,它引用了一个名为 ClassLibrary1 的类库。

    {
        "webroot" : "wwwroot",
        "exclude": "wwwroot/**/*.*",
        "dependencies": {
            "Microsoft.AspNet.Server.IIS": "1.0.0-alpha4",
            "ClassLibrary1": ""
        },
        "frameworks" : {
            "aspnet50" : { },
            "aspnetcore50" : { }
        }
    }
    

    如果您想设置 NuGet 提要,您可以阅读 the official NuGet documentation to see how that is done.kpm build 的输出复制到您的 NuGet 提要中。

    注意:VS14 CTP4 仅适用于 KRuntime 的 alpha4。如果你想在 vNext 中使用 VS14 而不会弹出错误,你需要将你的 KRuntime 降级到 1.0.0-alpha4 版本。

    【讨论】:

    • 我已经撤回了我的答案,但留下了评论,以防其他人来到这里试图为常规类库解决这个问题:我使用 Nuget Package Explorer 为第三方 dll 创建了 nuget 包我需要参考。在 lib 文件夹中简单拖放 dll 并在资源管理器中填写基本元数据后,我创建了包并添加了 Nuget 包管理器(CTP4 版本)查找目录的路径。之后,我直接在 project.json 中添加了 nuget 包名称,它就像拾取任何其他在线包一样拾取。
    • 我试过这个,但它坏了。我的类库依赖于"mongocsharpdriver": "1.9.2",它位于project.json 中,并且在VS 中构建良好。但是,当我尝试使用kpm 构建时,它找不到这种依赖关系。不过,它并没有抱怨微软的依赖关系。有什么想法吗?
    • 很难说。包位置在 alpha3 和 alpha4 之间移动,所以可能是这样。确保您的运行时至少是 alpha4。我尝试在一个简单的 vnext 项目中使用该包,它构建得很好。
    • 我的默认运行时是1.0.0-alpha4 CLR x86
    【解决方案2】:

    从类库创建 NuGet 包

    如果您使用 Visual Studio 2015 RC 及更高版本:转到您的类库项目属性,打开 Build 选项卡并选中 Produce outputs on build 选项:

    NuGet 包将在每个项目构建的{SolutionDir}\artifacts\bin\{ProjectName}\{Configuration} 目录中创建。

    如果你使用命令行

    1. 确保您安装了DNVMDNX(有关说明,请参阅ASP.NET Home repo)。
    2. 在项目目录中运行dnu pack。默认会在{ProjectDir}\bin\{Configuration} 目录下创建 NuGet 包。

    使用打包类库

    要在同一解决方案的另一个项目中使用类库,请将其添加为 Visual Studio 中的常用项目引用或添加到 project.json 中的 dependencies 属性:

    "dependencies": {
      "ClassLibrary1": ""
    }
    

    要在其他解决方案中使用该库,请将 NuGet 包发布到 nuget.org 或任何其他 NuGet 源,并使用 Visual Studio (References ~> Manage NuGet Packages...) 或 @ 中的 dependencies 属性将其添加到您的项目中987654337@.

    【讨论】:

      【解决方案3】:

      没有足够的代表发表评论。

      根据 2016 年 8 月 8 日发布的 migration docs 更新为Whyleee 的回答,作为 DNX 工具集一部分的工具已被 dotnet CLI 工具取代。

      所以,dnu pack 变成了dotnet pack,并且默认在 bin/[Configuration] 目录下创建了 nuget 和 symbols 包。对于大多数命令,您几乎可以将 dnu 替换为 dotnet

      要在本地添加 nuget 包,请参阅answer

      【讨论】:

        【解决方案4】:

        从 VS2019 开始,需要更新项目属性/Package 选项卡,并选择“Generate NuGet package on build”。

        Property Tab Image

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-13
          • 2016-08-04
          • 2011-10-12
          • 1970-01-01
          相关资源
          最近更新 更多