将第 3 方 DLL 包含在从 VS csproj 生成的 NuGet 包中

tom*_*dox 10 visual-studio nuget nuget-spec

我正在尝试从 VS 2017 项目创建一个 NuGet 包,其中包含对第 3 方 DLL (Kendo.mvc.dll) 的引用。无论我如何尝试,我都无法nuget pack自动将该 DLL 包含在 NuGet 包的 lib 文件夹中。

我最初.nuspec使用命令从命令行创建了该文件nuget spec [project's name and path].csproj。然后我调整了该文件的设置,生成了这个 .nuspec 文件:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>our names</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>the description</description>
    <releaseNotes>First release</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>entity-framework-6 mvc5</tags>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

然后我用来nuget pack创建包,结果是这样的:

软件包内容显示不包含第 3 方 DLL

根据我在文档(MS Docs - 创建 NuGet 包)中读到的内容,我期望nuget pack自动将项目中引用的任何非 nuget 来源的 DLL 包含在包中,但这并没有发生?

我尝试了以下方法,看看是否有任何区别,但都无济于事:

  • lib文件夹添加到项目的根目录并将 DLL 放入其中(并尝试更改“生成操作”和“复制到输出目录”设置)。这会在 NuGet 包的 Content 文件夹下创建一个 lib 文件夹,而不是将 DLL 添加到lib包含程序集 DLL 的同一文件夹中。我这样做是因为MS 文档讨论了基于约定的文件结构。
  • 从 C:\Program Files 中的文件夹引用 DLL,并在属性中将 DLL 的复制本地属性设置为 true

这个问题.nuspec讨论的是为第 3 方 DLL 添加一个单独的元素,我猜这是指在生成包之前在文件中显式添加文件,例如

  <files>
    <file src="bin\Debug\Kendo.Mvc.???" target="lib\net461" />
  </files>
Run Code Online (Sandbox Code Playgroud)

.nuspec这确实有效,但是如果从文件生成文件时需要的话,不应该自动添加它吗csproj

小智 11

如果您想通过 Visual Studio 或 dotnet 执行此操作,则可以编辑 csproj 文件,添加一个 ItemGroup 以包含 dll,如下所示: 这会将其他 dll 与当前项目 dll 一起打包在 nuget 包中。

<ItemGroup>
    <Content Include="<path to other dll>">
        <Pack>true</Pack>
        <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)


Leo*_*SFT 3

但如果从 csproj 文件生成 .nuspec 文件时需要,是否应该自动添加它?

.nuspec是的,从文件生成文件时,默认情况下不会自动添加非 nuget 来源的 DLL .csproj

当我们.nuspec从文件生成文件时.csproj.nuspec仅包含基本信息,例如标题、描述等。您可以从程序集信息,属性->应用程序->程序集信息中获取此信息:

在此输入图像描述

但它默认不包含第3方DLL。

因此,为了包含第三方 DLL,我们需要手动在.nuspec文件中显式添加文件,就像您所做的那样。

检查从 dll 创建 nuget 包以了解更多详细信息。

顺便说一句,如果第 3 方 DLL 是项目中引用的 nuget 来源的 DLL,则可以-IncludeReferencedProjects在从 csproj 文件生成 .nuspec 文件时使用该参数自动添加它。

文档:pack 命令 (NuGet CLI)

希望这可以帮助。