Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

  • Adding a lib folder to the root of my project and putting the DLL in there (and experimented a bit with changing the Build Action and Copy to Output Directory settings). That created a lib folder under the Content folder in the NuGet package, rather than adding the DLL to the same lib folder that contains the assembly's DLL. I did that because the MS docs talk about a convention based file structure.
  • Referencing the DLL from a folder in C:\Program Files and setting the Copy Local property for the DLL to true in the Properties

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?

like image 972
tomRedox Avatar asked Sep 24 '18 16:09

tomRedox


People also ask

How do I create a NuGet package from a third party DLL?

The simplest and fastest way to get a nuget package up and running is to just fire up package explorer --> create a new package --> drag and drop your dlls into the "Package Contents" area, it'll ask you whether you want the dlls in the "lib" folder, which you do --> create a bit of metadata about the package, ie give ...

How do I reference an existing NuGet package from a new project?

NET or . NET Core project. After you install a NuGet package, you can then make a reference to it in your code with the using <namespace> statement, where <namespace> is the name of package you're using. After you've made a reference, you can then call the package through its API.


1 Answers

If you want to do it through Visual Studio or dotnet, then you can edit your csproj file, add an ItemGroup to include the dlls as below: This will pack the other dlls along with your current project dll in the nuget package.

<ItemGroup>
    <Content Include="<path to other dll>">
        <Pack>true</Pack>
        <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
</ItemGroup>
like image 186
Akhil Dabral Avatar answered Sep 30 '22 19:09

Akhil Dabral