Nuget Pack with -IncludeReferencedProjects includes itself - nuget

My nuget build script,
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform);TargetPath=$(OutDir)$(AssemblyName)$(TargetExt)" $(NonInteractiveSwitch) $(PackageOutputSwitch) -IncludeReferencedProjects -verbosity detailed</BuildCommand>
is for some of my projects including the project itself as a dependency. I have no idea why.
outputted nuget spec in the nupkg
<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">
<metadata>
<id>Ascend.Data.ServiceBus</id>
<version>1.0.0-pre-2014052105</version>
<title>Ascend.Data.ServiceBus</title>
<authors>Ascend Aps</authors>
<owners>Ascend Aps</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<copyright>Copyright 2014</copyright>
<tags>Tag1 Tag2</tags>
<dependencies>
<dependency id="AzureWebRole.MessageProcessor.Core" version="1.0.0-CI00028" />
<dependency id="AzureWebRole.MessageProcessor.ServiceBus" version="1.0.0-CI00028" />
<dependency id="S-Innovations.Azure.TableStorageRepository" version="1.0.0-CI00020" />
<dependency id="Unity" version="3.5.1404.0" />
<dependency id="Ascend.Data.ServiceBus" version="1.0.0-pre-2014052105" />
</dependencies>
</metadata>
</package>

By any chance, your solution has a circular dependency? If possible, can you please share a simplified repro project and report an issue on http://nuget.codeplex.com? Thanks.

Related

Nuget pack does not carry dependency versions correctly

I have Nuget packages created from two projects: foo.csproj and bar.csproj. When using nuget update, I would like bar to update foo to the latest version matching 3.0.*, and reject any 3.1.*:
bar packages.config
<packages>
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net461" />
<package id="foo" version="3.0.4" targetFramework="net472" allowedVersions="3.0" />
</packages>
bar.nuspec
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>var</id>
<version>3.0.4</version>
<!-- omitted -->
<!-- no dependency node in this .nuspec file - good, I think -->
</metadata>
</package>
and in my Nuget feed I have:
foo.3.0.0.nupkg
foo.3.0.1.nupkg
foo.3.0.2.nupkg
foo.3.0.3.nupkg
foo.3.0.4.nupkg
If I call nuget update, it updates the packages.config file correctly - yay!
However, when I call nuget pack bar.csproj, it generates a .nupkg file that includes the following bar.nuspec file:
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>var</id>
<version>3.0.4</version>
<!-- omitted -->
<dependencies>
<dependency id="Newtonsoft.Json" version="12.0.1" />
<dependency id="foo" version="3.0.0" />
</dependencies>
</metadata>
</package>
I expected nuget pack to abide by the packages.config allowedVersions attribute when generating the dependency node inside the .nupkg file.
How do I get nuget update and nuget pack to work together to keep bar up to date with the latest 3.0.* version of foo (in this example, 3.0.4)?
I expect it will work as you desire if you remove the allowedVersions attribute from your packages.config file.

Nuget not copying content

I am having a problem including a file i need in order for the project to work, here is the nuspec file that i have:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>package_name</id>
<version>1.0.1</version>
<title>x Wrapper</title>
<authors>me</authors>
<owners>me</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>package desc.</description>
<releaseNotes>Bugfix to exe not being copied.</releaseNotes>
<copyright>Copyright 2017</copyright>
<tags></tags>
<dependencies>
<dependency id="x.Common.Interfaces" version="1.0.0" />
<dependency id="x.Common.Logging" version="1.0.0" />
<dependency id="x.Wrapper.Common" version="1.0.0" />
</dependencies>
</metadata>
<files>
<file src="build\package_name.props" target="build\package_name.props" />
<file src="build\package_name.targets" target="build\package_name.targets" />
<file src="x.Wrapper\x.exe" target="content\x.exe" />
<file src="bin\Debug\package_name.dll" target="lib\net45\package_name.dll" />
</files>
</package>
When package is pushed and installed to nuget server there is only project dll + dependencies dll's but no other files are being copied into the project. Anyone with some more experience with nuget packages has idea on what could be going on ?

NuGet - Create a package with projectUrl from command line

Here's the command line I use to create a NuGet package:
nuget.exe pack something.csproj -OutputDirectory "\\some\directory" -Prop Configuration=Release
Is there a way to set the projectUrl element (or maybe any other Metadata element) directly in the command line?
How about something like the following:
nuget pack something.csproj foo.nuspec /p version=1.0.0.0;projectUrl="http://myurl.com/
while nuspec would look like the following:
<?xml version='1.0'?>
<package xmlns='http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd'>
<metadata>
<id>Foo</d>
<version>$version$</version>
<authors>$authors$</authors>
<description>Some description</description>
<language>en-US</language>
<licenseUrl>$licenseUrl$</licenseUrl>
<projectUrl>$projectUrl$</projectUrl>
<iconUrl>$iconUrl$</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<tags>some tags</tags>
<dependencies>
<dependency id='CodeContracts.Unofficial' version='$codeContractsVersion$'/>
</dependencies>
</metadata>
<files>
......
</files>
</package>

Force nuget to always update a dependency

I wish to ensure my nuget package always updates to the latest version of another dependent package. Is there anyway I can do this?
My current nuspec looks like
<?xml version="1.0"?>
<package>
<metadata>
<id>Engine</id>
<version>$version$</version>
<title>Engine</title>
<authors>AgResearch</authors>
<owners>Overseer </owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>My budget model</description>
<releaseNotes>Release model</releaseNotes>
<copyright>Copyright 2014</copyright>
<tags>Overseer engine</tags>
<dependencies>
<dependency id="OverseerEngine.Schema" version="" />
<dependency id="Rezare.Lib" version="1.0.23.2" />
</dependencies>
</metadata>
<files>
<file src="OverseerEngine.dll" target="lib\net40\OverseerEngine.dll" />
<file src="OvrFileImport.dll" target="Content" />
</files>
</package>
It is the OverseerEngine.Schema package that I wish to always be updated (if an update is available) whenever this package is.
Currently there is not an automated way to do this. User has to manually update the package using the console or the update tab of manage nuget packages dialog.

Prerelease versioning in NuGet

I am trying to create a NuGet pre-release package. Here is my NuSpec file:
<?xml version="1.0"?>
<package >
<metadata>
<id>xxx.Web.Mvc</id>
<version>1.0.3-prelrelease1</version>
<authors>xxx</authors>
<owners>xxx</owners>
<projectUrl>https://xxx</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>xxxx.</description>
<releaseNotes>NuGet package.</releaseNotes>
<copyright>Copyright 2013 xxx</copyright>
<tags>asmx xxx</tags>
<dependencies>
<dependency id="Microsoft.AspNet.Mvc" version="4.0.30506.0" />
<dependency id="Microsoft.AspNet.Razor" version="2.0.30506.0" />
<dependency id="Microsoft.AspNet.WebPages" version="2.0.30506.0" />
<dependency id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
<dependency id="xxx" version="1.0.6" />
</dependencies>
</metadata>
</package>
Note I am using the SemVer mechanism for the pre-release version.
However, when I build my package using:
PM> nuget pack Package.nuspec
I get:
nuget : Input string was not in a correct format.
At line:1 char:1
+ nuget pack Package.nuspec
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Input string wa...correct format.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
This directly refers to my having alphabetic characters in the version string.
I am using NuGet 2.2/VS2012.
How come my version string isn't being recognised?
Update
I've reduced the file to:
<?xml version="1.0"?> <package > <metadata>
<id>xxx</id>
<version>1.0.3-test1</version>
<authors>xxx</authors>
<owners>xxx</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>xxx</description> </metadata> </package>
and a single file in the ~\content folder:
~\content\New Journal Document.jnt
(First time I've seen Windows Journal. Thought I'd try it to make a simple file. :/ )
Fixed it.
Despite reinstalling NuGet 2.x, it seems I still have a v1.5 hanging around.
Seems the Powershell environment was using this version and the Package Manager Console Host Version 2.7.40911.225 message didn't refer to the version of PowerShell, just the host. Seems obvious now I know.
I've manhandled the file and overwritten it.
All now working.
So both this:
NuGet.exe" pack ".\MyPackage.nuspec" -Version 1.0.1-alpha
and
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>MyCoolPackage</id>
<version>1.0.1-alpha</version>
<authors>MyAuthors</authors>
<owners>MyOwner</owners>
<!-- <licenseUrl>http://www.yourLicenseUrl.com</licenseUrl> -->
<projectUrl>http://www.yourProjectUrl</projectUrl>
<iconUrl>http://www.yourIconUrl.com</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>BuildDate : 2013_10_16__17:13:46</description>
<releaseNotes>My Release Notes.</releaseNotes>
<copyright>Copyright 2013</copyright>
<tags>MyTag1 MyTag2</tags>
<dependencies>
<!--
<dependency id="SampleDependency" version="1.0" />
-->
</dependencies>
</metadata>
</package>
worked for me.
I am using 2.7.40809.172.
So try:
( Number 1 )
take out your
<dependencies>
(just for kicks)
( Number 2 )
~try a later version of
NuGet.exe
(although based on the documentation, you should be ok)
I pulled
1.0.1-alpha
straight from the documentation.
Start with that, then work your way up to your custom value.
http://docs.nuget.org/docs/reference/versioning
So I took your nuspec , and put it in my demo code.
and it worked! (I'm xml updating the description, fyi, thus the small discrepancy) (see xml below)
But I got a nice "xxx.Web.Mvc.1.0.3-prelrelease1.nupkg" file created.
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>xxx.Web.Mvc</id>
<version>1.0.3-prelrelease1</version>
<authors>xxx</authors>
<owners>xxx</owners>
<projectUrl>https://xxx</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>BuildDate : 2013_10_17__11:29:15</description>
<releaseNotes>NuGet package.</releaseNotes>
<copyright>Copyright 2013 xxx</copyright>
<tags>asmx xxx</tags>
<dependencies>
<dependency id="Microsoft.AspNet.Mvc" version="4.0.30506.0" />
<dependency id="Microsoft.AspNet.Razor" version="2.0.30506.0" />
<dependency id="Microsoft.AspNet.WebPages" version="2.0.30506.0" />
<dependency id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
</dependencies>
</metadata>
</package>
So maybe it has something to do with the "contents", not the spec.
So you can do a "basic" package, like:
.\Package.nuspec
.\content\
.\content\SomeImageFile.png
.\lib\
.\lib\net20\SomeDll.dll
and see if that works with your nuspec file with the pre-release versioning?