Install Nuget-Dependency with package created over .nuspec file - nuget

I'm trying to create a NuGet-Package from several thrird-party library files. One of these files have a dependency to System.Drawing.Common. So I tried to add this as a dependency into my .nuspec file:
<metadata>
<id>...</id>
<version>...</version>
<authors>...</authors>
<description>...</description>
<copyright>...</copyright>
<tags>...</tags>
<references>
<reference file="EntryPointLibrary.dll" />
<reference file="EntryPointLibrary.xml" />
</references>
<dependencies>
<group targetFramework=".NETCoreApp3.1">
<dependency id="System.Drawing.Common" version="[6.0.0]" />
</group>
</dependencies>
</metadata>
Unfortunately after installing the Nuget-Package from local the System.Drawing.Common is not installed automatically and the System.Drawing.Common.dll is not inside the build folder. I also downloaded the System.Drawing.Common Nuget-Package from nuget.org and copied this package in my local nuget space.

I have the same problem. If you have write the dependencies setting. It should be ok. If it not work. You can try these steps as follow
Step1:Delete your target project obj and bin file.
Step2:Clean your cache. You can enter the common
nuget locals all -clear
Step3: Rebuild Project
Step4: Install your custom NuGet-Package
You can see the the package detail will have the System.Drawing.Common item

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.

Packing static content in Nuget for PackageReferece projects

I have a Class Library (net47) project and I'd like to pack into a nuget my dll and several files of static content (js, css, images...). I want to use this dll and the content from the consumer projects. These projects will be MVC PackageReference projects. In these projects the local static files are in the wwwroot folder.
I have tried this: NuGet ContentFiles Demystified but I get my js and css files referenced (they aren't copied to my project content).
In my nuspec I've tried with all build options: EmbeddedResource, Content, None and Compile, but these references are imported always in Compile mode. So I get a compile error when I start debugging.
I know this was possible with Package.config projects and it's very simple but all my consumer projects will be PackageReference.
This is my nuspec
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyProject</id>
<version>1.0.0</version>
<authors>My</authors>
<owners>My</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>LVP</description>
<copyright>Copyright 2018</copyright>
<tags>Tag1 Tag2</tags>
<contentFiles>
<files include="any/any/bd.js" buildAction="content" flatten="true" copyToOutput="false"/>
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/bd.js" target="contentFiles/any/any/bd.js" />
</files>
</package>
I pack my nuget with this powershell command:
nuget pack MyProject.nuspec
Although I have also tried with the csproj:
nuget pack MyProject.csproj
And my source folder structure is this:
C:\...[projectPath]...\contentFiles\any\any\bd.js
Installation is ignoring my build action.
Why is always trying to compile my content files? Is there a better way to add static content to the consumer project?
Installation is ignoring my build action. Why is always trying to compile my content files? Is there a better way to add static content to the consumer project?
To answer your previous question Packing files on nuget, I have created a sample nuget package and set the build action to content for the content files, after install that nuget package, the build action would be set content:
Then I checked your .nuspec file, found it should be correct. So the issue is not related to your .nuspec file.
Besides, in the above image, you will notice that the path of the content file is nuget local cache:
C:\Users\<UserName>\.nuget\packages\
NuGet will first extract the nuget package from the local cache when install the nuget package to avoid downloading packages that are already on the computer. In other wards, although we have updated the nuget package in the local, nuget will detect the local cache first, if it found the same package in the cache, nuget will install it from cache rather than local feed.
To resolve this issue, please try to remove your nuget package in the local cache before installing the updated nuget package. Generally, when we package the same package again, wed better change the package version in the.nuspec` file so nuget local cache will not catch them.
Update for comment:
I've tried increasing the version number and deleting the nuget cache and the problem persists. My build action is always set to "C# Compiler". I just tried changing the name of the js file and the project imports the new name so I do not think it's a cache problem
After test your nuget package, I found the reason why you get that issue, we should keep the path the src and target paths are the same in the .nuspec file. Since you want set content file to the wwwroot folder, you should set the file in the wwwroot folder, then pack the .nuspec:
<contentFiles>
<files include="any/any/wwwroot/css/bd.css" buildAction="Content" copyToOutput="false" flatten="true" />
<files include="any/any/wwwroot/js/bd.js" buildAction="Content" copyToOutput="false" flatten="true" />
</contentFiles>
Following in my .nuspec scripts(Not need content node):
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>BancaDigitalViewProvider</id>
<version>1.0.37</version>
<authors>Ibercaja</authors>
<owners>Ibercaja</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Login View Provider</description>
<copyright>Copyright 2018</copyright>
<tags>Banca Digital View Provider</tags>
<dependencies />
<contentFiles>
<files include="any/any/wwwroot/css/bd.css" buildAction="Content" copyToOutput="false" flatten="true" />
<files include="any/any/wwwroot/js/bd.js" buildAction="Content" copyToOutput="false" flatten="true" />
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/wwwroot/css/bd.css" target="contentFiles/any/any/wwwroot/css/bd.css" />
<file src="contentFiles/any/any/wwwroot/js/bd.js" target="contentFiles/any/any/wwwroot/js/bd.js" />
<file src="bin\debug\BancaDigitalViewProvider.dll" target="lib\net47\BancaDigitalViewProvider.dll" />
</files>
</package>
This is nuget package:
https://1drv.ms/u/s!Ai1sp_yvodHfhTk5xutPpaBZLC-A
You can download it and test.
Then install it to the ASP.NET core MVC project:
Hope this helps.

Nuget Package won't install in UAP

I'm trying to create a custom nuget package out of one of my projects. When I try to install it into the test project that references it, I receive this error:
Package "package" 1.0.5 is not compatible with uap10.0.15063 (UAP,Version=v10.0.15063). Package "package" 1.0.5 supports: net (.NETFramework,Version=v0.0)
This obviously isn't the case because the test project can run fine referencing the Project itself.
I'm building the nuget package based on my nuspec file:
<?xml version="1.0"?>
<package >
<metadata>
<id>Project</id>
<version>1.0.0</version>
<title>Project</title>
<authors>company</authors>
<owners>company</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>desc</description>
<copyright>cp</copyright>
<dependencies>
<group targetFramework="uap ">
<dependency id="Logging" version="1.0.0" exclude="Build,Analyzers" />
<dependency id="Microsoft.NETCore" version="5.0.0" exclude="Build,Analyzers" />
<dependency id="Microsoft.NETCore.Portable.Compatibility" version="1.0.0" exclude="Build,Analyzers" />
<dependency id="NuGet.Build" version="2.12.0" exclude="Build,Analyzers" />
<dependency id="NuGet.CommandLine" version="4.1.0" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="bin\Release\*.dll" target="lib" />
</files>
"Logging" is also a custom nuget package I created from the .csproj file of another project.
I've tried removing the tag, and also tried renaming the targetFramework="uap", none of that works.
What could be wrong and what can I try to get this working?
The target doesn't just rely on the NuSpec file, it would depend on the C# project and the dll itself. Go to:
Project> Rightclick> Properties> TargetFramework>
Set it to .Net or whatever. Also, change your output type to a console application rather than a windows application, if that is doable.
Also, you should create the nuspec file using:
Nuget spec < ProjectPath >
This gives us the advantage to just change the metadata for .csproj files, and copies that into the package metadata automatically.
I'm not a 100% sure if this will fix it, but this should be what needs to be done. Best of luck!

Nuget package missing interfaces

I have created a package for a framework which depends on numerous projects within a single solution. I want to create nuget packages for the framework and various projects within the solution.
In Framework.Framework.nuspec, I have the following dependencies declared:
<dependencies>
<group>
<dependency id="Framework.CompositionRoot" version="1.0" />
<dependency id="Framework.Services" version="1.0" />
<dependency id="Framework.Domain" version="1.0" />
</group>
</dependencies>
And in each project file has its own nuspec file, such as Framework.CompositionRoot.nuspec, which has the following dependencies:
<dependencies>
<group>
<dependency id="Super.Services" version="1.0" />
<dependency id="Super.Data" version="1.0" />
<dependency id="Super.Domain" version="1.0" />
</group>
</dependencies>
My problem is that when I install Framework.Framework in another project, it seems to install some of the dependent nuget packages but not others. In this case, it installs Framework.CompositionRoot and Framework.Services, but not Framework.Domain.
Framework.Domain has its own nuspec file in the solution and the generated Framework.Framework.nupkg file shows Framework.Domain as a dependency. I have only installed Framework.Framework in the project, not Framework.Domain, since to my understanding this should be installed when I install Framework.Framework.
When I look in the references for the solution, it has added a Framework.Domain.dll, but half of the interfaces declared in that domain are missing. (I have made sure the missing interfaces are declared as public.) However, if I copy/paste the dll into the lib folder and reference it manually, all the of the interfaces are there.
Any help would be appreciated.
This was due to nuget installing old versions by default. While Framework.Domain was not in the list of installed packages when viewing through the package manager, it was visible in packages.config, and had an old version which did not contain the interfaces. (Nuget install will install the lowest version of dependencies by default.)
In order to fix this, I uninstalled the package and re-installed it using the flag:
-DependencyVersion "HighestPatch".