Nuget package not adding reference on custom package - nuget

I created a nuspec file:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MyPackage.dll</id>
<version>3.5</version>
<authors>Me</authors>
<owners>Me</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>The description</description>
<tags>tag1</tags>
</metadata>
</package>
In a directory with the file strucutre
MyPackage
Assemblies
MyPackage.dll
MyPackage.nuspec
I created my package using nuget.exe pack myPackage.nuspec and placed it in my local sources. I can find and install it from visual studio at which point
The dll is copied into the packages directory
But the reference is not added to the project
No repositories.config is created
No packages.config is created
What am I missing?

In case someone runs into this in the future. The solution was that the 'Assemblies' directory needed to be renamed 'lib'. The documentation was wrong (been updated, now it's correct).
Big thanks to dotnetjunky over on codeplex

Related

Nuget Packages Not Restoring

I recently migrated my projects from using PackageReferences to a package.config file. For awhile I've been able to call nuget.exe restore ...\Solution.sln and everything has looked fine. Now when I build I appear to be missing references to my packages used in my package.config files.
I removed all of the 'PackageReferences' from the .csproj file and added a 'packages.config' to each project that look like the following:
Ex 1:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net31"/>
</packages>
Ex 2:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AspNetCore.HealthChecks.SqlServer" version="3.2.0" targetFramework="net31"/>
<package id="Newtonsoft.Json" version="13.0.0" targetFramework="net31"/>
<package id="System.ServiceModel.Security" version="4.9.0" targetFramework="net31"/>
</packages>
I have Automatically check for missing packages during build in Visual Studio checked in the NuGet Package Manager options of Visual Studio. I am using Visual Studio 2019 16.11.15 and NuGet 6.2.0.
Going to package manager and putting in update-package -reinstall outputs No package updates are available from the current package source for project 'ProjectName'.
If I right-click a packages.config file and select Migrate packages.config to PackageReference... I get an Operation Failed error. Is something wrong with my packages.config files? Is there anything else I can check?
Edit: I have attempted to delete all of my .vs, obj, and bin files. Also my csproj files begin with either <Project Sdk="Microsoft.NET.Sdk"> or <Project Sdk="Microsoft.NET.Sdk.Web">
We can only see migrate from packages.config to PackageReference in offical documatation because PackageReference is something newer. Reverse migration is not a good option.
You said you want to use packages.config with nuget restore so all dependencies can always be downloaded/updated after a fresh pull. You can refer to this page, it gives us many methods to restore packages.
For example, you can use “msbuild -t:restore” in PackageReference to restore packages. See this.

NuGet package not copying files and transform files as expected

I am trying to understand how NuGet packages work so that I can package some of my repeatedly used source for future projects.
I am working with a simple class library (.Net Foundation) and using the CLI to make the nuspec file and then packing from the CLI I get a nuget package that installs the Class Library DLL perfectly.
But now I want to add a transform to the App.Config that includes a connection string and I want to copy a simple readme type file to the destination project.
Using the following nuspec file the readme does not install to the readme folder as expected (doesn't install at all) and I can't get any of the app.config.transforms to work at all.
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Stuff</releaseNotes>
<copyright>Copyright 2019</copyright>
<tags>123 1234</tags>
</metadata>
<files>
<file src="app.config.transform" target="content\app.config.transform" />
<file src="Model\State1.cs" target="content\State1.cs"/>
<file src="new.txt" target="content\new.txt"/>
</files>
</package>
Where should I put the transform files? It seems that they should be in a content folder in my source project but that isn't working. When I pack the nuget package I get an error about the files not being inside the content folder even though they clearly are.
With the above nuspec file I get an error:
Access to the path 'C:\Users\ UserName \.nuget\packages\MyDLLProject.lookups\1.1.7041.17482\content' is denied.
Why is that?

NuGet include tools folder when packing from csproj

I'm trying to create a nuget package from a csproj file. This package will include an install.ps1 script in the tools folder and some files in the content folder.
However, it seems like when packing from a csproj file, nuget will pull the package information (description, tags, etc.) from the corresponding nuspec file, but not anything else. It ignores the tools folder that is in the same directory as the nuspec file as well as the content folder.
When packing this way nuget also seems to ignore files included in the contentFiles section of the nuspec file.
Is this expected behavior? If it is, is there a way for me to pack from a csproj and get the content and tools folders to be included in the package?
I realize I could just use only a nuspec file and this would work, but I have multiple packages I'm trying to build this way and managing the dependencies manually becomes a less than trivial task.
Running NuGet 3.4.4.1321
My nuspec file:
<?xml version="1.0"?>
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$id$</title>
<authors>authors</authors>
<owners>$owners$</owners>
<projectUrl>http://dummy.url</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>the description</description>
<copyright>$copyright$</copyright>
<releaseNotes>$releaseNotes$</releaseNotes>
<contentFiles>
<files include="content\App.config.install.xdt"/>
<files include="content\App.config.uninstall.xdt"/>
<files include="temp\App.config"/>
</contentFiles>
<tags>wpf testing</tags>
</metadata>
</package>
Turns out the documentation for this confused me a bit. Content Files are not a replacement for Files. In NuGet 3, both can be used simultaneously.
Using the Files tag outside of the metadata tag in my nuspec file allowed me to specify items that go into the tools and content folder.
Updated nuspec:
<?xml version="1.0"?>
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$id$</title>
<authors>authors</authors>
<owners>$owners$</owners>
<projectUrl>http://dummy.url</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>the description</description>
<copyright>$copyright$</copyright>
<releaseNotes>$releaseNotes$</releaseNotes>
<tags>wpf testing</tags>
</metadata>
<files>
<file src="App.config.install.xdt" target="content"/>
<file src="App.config.uninstall.xdt" target="content"/>
<file src="tools\install.ps1" target="tools"/>
</files>
</package>
Hopefully this helps in case anyone else gets tripped up by the docs here.
A bit more discussion can be found in this NuGet Issue.
You could do nuget pack -Tool
Tool - Specifies that the output files of the project should be placed in the tool folder.
https://learn.microsoft.com/en-us/nuget/tools/cli-ref-pack

An item with the same key has already been added nuget error

I am currently creating a nuget package with a nuspec file but getting the following error:
An item with the same key has already been added.
My command I am using is:
nuget pack "MyProject.csproj" -o "..\Packages"
This is my nuspec file:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<language>$language$</language>
</metadata>
<files>
<file src="bin\MyLibrary*.dll" target="lib\net45" />
</files>
</package>
The nuspec file I am using is also used when packaging other packages withing the same library. Could this be the reason why the above error is occurring? Any ideas?
It might be that you are adding files in nuspec that are also getting added when you call pack on the .csproj (files/dlls referenced by the csproj). If so you can remove the file references from the nuspec file and give it a try.
how does your nuspec file look like?
I created it with the following steps
1. create the Mylibrary project
2. let me add a dependency, I installed ninject package to the project
3. build
4. nuget spec mylibrary.csproj
5. nuspec file generated, I didn't add any file or dependency manually to the file
6. nuget pack mylibrary.csproj
7. nuget pack would automatically add ninject as a dependency and also add mylibrary.dll into the correct folder
8. http://npe.codeplex.com/ is a nice tool to open the nupkg file and see what got generated inside the package.
I had this error trying to use the package visualizer and it ended up that my packages.config had the same package name in it more than once with different versions.

Nuget package cannot be installed

I set up a local nuget package repository and create a custom package.
I followed these two guides:
http://nuget.codeplex.com/wikipage?title=Hosting%20Your%20Own%20Local%20and%20Remote%20NuPack%20Feeds
http://nuget.codeplex.com/documentation?title=Creating%20a%20Package
and here is the nuspec file of my package:
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>NLog</id>
<version>1.0.0.505</version>
<authors>NLog</authors>
<description>NLog</description>
</metadata>
<files>
<file src="NLog.dll" target="lib"/>
</files>
</package>
the package was successfully created and the package shows up the package library.
But nothing happens when I click "INSTALL".
Can anyone help?
Looks like there was an issue with package building (Maybe the dll file didn't make it into lib). Try unzipping the package (rename to zip and extract) and seeing what's inside. We've updated nuget.exe and have added a -v flag to pack so that you can see the contents of your package after you build. You can install it from the ci machine http://ci.nuget.org:8080/guestAuth/repository/download/bt4/.lastSuccessful/Console/NuGet.exe).