visual-studionugetnuget-spec

Include 3rd party DLLs in a NuGet package generated from a VS csproj


I'm trying to create a NuGet package from a VS 2017 project that contains a reference to a 3rd party DLL (Kendo.mvc.dll). No matter what I try, I can't get nuget pack to automatically include that DLL in my NuGet package's lib folder.

I originally created the .nuspec file from the command line with the command nuget spec [project's name and path].csproj. I then tweaked the settings of that file which resulted in this .nuspec file:

<?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>

I then used nuget pack to create the package, which resulted in this:

Package contents showing no 3rd party DLL was included

From what I've read in the documentation (MS Docs - Creating NuGet packages) I was expecting nuget pack to automatically include any non-nuget-sourced DLLs referenced in the project in the package, but that's not happening?

I've tried the following to see if it makes any difference, all to no avail:

This question talks about adding a separate element for the 3rd party DLL which I'm guessing refers to adding the files explicitly in the .nuspec file before generating the package, e.g.

  <files>
    <file src="bin\Debug\Kendo.Mvc.???" target="lib\net461" />
  </files>

That does work, but shouldn't this be added automatically if it's needed when generating a .nuspec file from a csproj file?


Solution

  • but shouldn't this be added automatically if it's needed when generating a .nuspec file from a csproj file?

    Yes, the non-nuget-sourced DLLs were not added automatically by default when generating a .nuspec file from a .csproj file.

    When we generate the .nuspec file from a .csproj file, the .nuspec only includes the basic info, for example, Title, Description, and so on. You can get this info from Assembly Information, Properties->Application-> Assembly Information:

    enter image description here

    But it does not include the 3rd party DLL by default.

    So, in order to include third party DLLs, we need manually add the files explicitly in the .nuspec file, jusy like what you did.

    Check Create nuget package from dlls for more details.

    BTW, if the 3rd party DLL is nuget-sourced DLLs referenced in the project, you can use the parameter -IncludeReferencedProjects to add it automatically when generating a .nuspec file from a csproj file.

    Document: pack command (NuGet CLI)

    Hope this helps.