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:
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:
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.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?
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 ...
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.
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With