using nuget.exe commandline to install dependency - nuget

I want to use nuget.exe (version 2.5) in my CI build pipeline to install a package which has dependency to another package.
I have following nuspec file.
<?xml version="1.0"?>
<package>
<metadata>
<id>A</id>
<dependencies>
<dependency id="B" version="1.0.0.1" />
</dependencies>
</metadata>
<files>
<file src="A.dll" target="lib" />
</files>
</package>
and similar for B.
and my packages.config file which I used to install is:
<packages>
<package id="A" version="1.0.0.1" allowedVersions="[1,2)"/>
</packages>
and I run following command:
NuGet.exe install packages.config -ExcludeVersion -Outputdir libs -source http://get.nuget.mydomain
I get output:
Successfully installed 'A 1.0.0.1'.
but do not get my dependency B installed.
But if put B separately in packages.config file, I get both A and B getting installed. I expected B to be installed when we install A as it is a dependency of A.
We do not put dlls in GAC (so I believe dependency resolution should not be a problem).Also I have opened A.nupkg and checked that is has dependency listed there.
Also when I install A from with in visual studio editor B also gets installed.(which is what should happen).
How do I use nuget.exe and install dependency B when i install A only (put A only in packages.config).
thanks

This is not possible. The behavior of the packages.config file is by design. Only things specified in the packages.config are installed, not their dependencies. All dependencies must be explicitly specified as well.
If you look at the source code you will see that nuget.exe install packages.config (http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Commands/InstallCommand.cs) uses PackageExtractor.InstallPackage (http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Common/PackageExtractor.cs):
public static void InstallPackage(IPackageManager packageManager, IPackage package)
{
var uniqueToken = GenerateUniqueToken(packageManager, package.Id, package.Version);
// Prerelease flag does not matter since we already have the package to install and we ignore dependencies.
ExecuteLocked(uniqueToken, () => packageManager.InstallPackage(package, ignoreDependencies: true, allowPrereleaseVersions: true));
}
Note the hard call to ignoreDependencies: true

Related

Custom NuGet package not installing in wix project

I generate a NuGet that is is just a number of redist files that I want to use in one of my projects. If I install it in a C# or C++ projects, it works. But when I try to install it in a wixproj project and I get the following message:
Could not install package 'package-1.0.0'. You are trying to install this package into a project that targets 'Unsupported,Version=v0.0', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
I generate the package through a TeamCity task (using NuGet 5.6.0). When trying to generate the package with a NuGet CLI 5.8.1, I get the following warning:
*WARNING: NU5128: Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below:
Add a dependency group for native0.0 to the nuspec*
Looked at https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu5128, one of the solutions was trying a dependencies group targetFramework, (I used "native0.0") with no success. My nuspec is as follows:
<?xml version="1.0"?>
<package>
<metadata>
<id>package</id>
<version>1.0.0</version>
<authors>package</authors>
<owners>owner</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>my package</description>
<copyright>© 2021 company, Inc</copyright>
<tags>native</tags>
</metadata>
<files>
<file src="downloads\Folder\win32.vs2017\file1.lib" target="lib\native\lib\win32.vs2017\" />
<file src="downloads\Folder\win32.vs2017\file1-debug.lib" target="lib\native\lib\win32.vs2017\" />
<file src="downloads\Folder\Include\**" target="lib\native\include\" />
<file src="build\package.props" target="build\native" />
</files>
</package>
And my props file
<Project>
<PropertyGroup>
<MyVersion>1.0.0</MyVersion>
</PropertyGroup>
</Project>
I can install other NuGet packages into wixprojects, so how I configure mine to work? Thanks.
OK I found it, the issue lies at the line
<file src="build\package.props" target="build\native" />
changing target to "build\" allows the NuGet to be loaded to any project type, included WixProj. Note that the NU5128 warning still exists though, but not an issue for me.

Nuget package delivers an old version of my DLL

I wrote a NuGet package that when my other projects use it they get an old version of one of my DLLs.
I include the newest version of my DLL as a reference in my NuGet project.
Project1.nuspec:
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>CommonLibrary</id>
<version>0.0.1</version>
<authors>It's Me</authors>
<owners>My Company/owners>
<description>Shared Library for Common Code and Wrapper</description>
<dependencies>
<dependency id="NLog" version="4.5.7" />
</dependencies>
</metadata>
<files>
<file src="CommonLibrary.dll" target="lib\net471" />
<file src="HelperCode.dll" target="lib\net471" />
</files>
</package>
The CommonLibrary.dll (the project) my NuGet package delivers the correct latest DLL, but that HelperCode.dll is always an older version.
in my project, I created a directory named: "binaries" and in that directory is the latest version of HelperCode.DLL. I reference that latest version in my project. So the NuGet package should deliver the latest version. I gave it a property of "Copy Local Always"
Any suggestions would be greatly appreciated.

Nuget pack always using Release folder

I'm trying to create a nuget package for a specific build configuration. Let's use Debug as an example. I run the command:
nuget pack path_to_my.nuspec -Properties "Configuration=Debug;"-Verbosity Detailed
It throws me the following error:
Attempting to build package from 'path_to_my.nuspec'.
System.IO.FileNotFoundException: File not found: 'bin\Release\mydll.dll'.
As you can see, it tries to get the dll from bin\Release, and not bin\Debug.
Is it possible to tell nuget to use a different Configuration than Release, or use another path?
It would be necessary to check your nuspec file just in case you have hardcoded the Release path to bin\Release\mydll.dll, which is seems it's the case.
A valid nuspec file would have references to the dll without specifying the environment. Use wildcard to allow for any environment. For example:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MyProject</id>
<authors>iberodev</authors>
<version>1.0.0</version>
<projectUrl>https://www.diegodrivendesign.com/</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Sample</description>
</metadata>
<files>
<file src="bin\*\netstandard2.0/ProjectOne.dll" target="lib\netstandard2.0" />
<file src="bin\*\netstandard2.0/ProjectOne.pdb" target="lib\netstandard2.0" />
<file src="bin\*\netstandard2.0/ProjectTwo.pdb" target="lib\netstandard2.0" />
<file src="bin\*\netstandard2.0/ProjectTwo.pdb" target="lib\netstandard2.0" />
</files>
</package>
then you run the nuget pack command to reference your nuspec. Make sure you have compiled the code for the proper environment so that the dll that the nuspec references are available (e.g: dotnet build --configuration Debug)
nuget pack ./*NuGet/*.nuspec -Version 1.0.0 -OutputDirectory foo -Prop Configuration=Debug -Verbosity detailed

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).