NuGet Package Manager installing System dlls - visual-studio-2017

I have installed a 3rd Party .Net library https://github.com/Quobject/SocketIoClientDotNet using NuGet Package manager like so:
Install-Package SocketIoClientDotNet
I have noticed that this has imported several custom dlls as well as many .NET dlls such as:
System.Collections.Immutable
System.Collections.Specialized
System.Linq
System.Net.NameResolution
System.Net.Security
System.Net.Sockets
System.Runtime.Extensions
System.Runtime.InteropServices
System.Security.Cryptography.Algorithms
System.Security.Cryptography.Encoding
System.Security.Cryptography.Primitives
System.Security.Cryptography.X509Certificates
System.Text.RegularExpressions
System.Threading
System.Threading.Timer
I see that these dlls all have been imported into a folder called 'packages' in my solutions directory.
I do not want to have to include all these files in my installer so I was thinking that because these are system .NET dlls, can I not simply add them manually myself (Right Click-->Add Reference) and forget about them being pulled in via the package manager?
BUT when I try to add them using Visual Studios 'Add Reference' I do not see many of them in Assemblies-Framework or Assemblies-Extensions.

Related

How to use other projects nuget packages as DLL C++

I made my own Dll project, which includes a standard libraries like:
sstream
string
codecvt
fstream
iostream
string
etc. (non-3-party libraries)
and opencv4.2 (3-party library) which was installed through "Manage Nuget Packages" in Visual Studio.
After building it (creating the Dll and lib files) I linked to it from project, which is made to test the functionality of the dll. The project can't find opencv's libraries.
So I'm curious how to tell the testing project to include the nuget packages from Dll's project.
Note that installing opencv again through "Manage Nuget Packages" to testing Project helps, but it is not an option in my case.

How do I create nuget package and update metadata for C++/CLI vcxproj project

I have created C++/CLI project to wrap native library. How can I create nuget package using powershell command to add this wrapper library as well as native C++ dll it wraps.
I can see some posts for how to use nuget packages in C++/CLI projects but cannot find anything useful for actually creating nuget package for C++/CLI project itself. Nuget.exe "pack" command fails for .vcxproj project.
The NuGet.exe will automatically replace metadata like id, version etc from assembly/csproj file but we are not using vcxproj to build nuget package for C++ CLI project.
I solved the problem by using nuspec file directly while building the library from bamboo itself. I used bamboo to set the build version of the metadata. All other metadata is hardcoded in the nuspec file which does not need to change with every build.
& "NuGet.exe" pack "Library.nuspec" -Version ${bamboo.BuildVersion} -OutputDirectory ${bamboo.build.working.directory}

Nuget "Manage Packages" dialog. Project names are mixed up

I've got a Visual Studio 2017 solution with several C# class library projects. On disk they take this structure:
MyProduct
MyCompany
MyCompany.ModuleA
MyCompany.ModuleB
MyCompany.ModuleC
But when I look at them in the "Manage NuGet Packages for Solution, the checkboxes show up in the dialog inconsistently. ModuleC appears strangely. Like this:
MyCompany.ModuleA
MyCompany.ModuleB
MyProduct\MyCompany\MyCompany.ModuleC
Also, whenever I build Module C, it keeps creating the following 3 files in its output /obj folder
- MyCompany.ModuleC.csproj.nuget.g.props
- MyCompany.ModuleC.csproj.nuget.g.targets
- project.assets.json
Neither of the other two modules does this.
I'm trying to understand the reason for the inconsistency and to fix it if I can. I have tried combing through the text of the .csproj files for these various projects but I can't spot any differences that might make this happen. And the raw text of the .SLN file project entry all look consistent for each of the 3 modules.
How does NuGet decide what name to put in the Manage Packages for Solution dialog?
Why is NuGet creating those temporary files in the output folder for Module C but not Module's A or B?
How does NuGet decide what name to put in the Manage Packages for Solution dialog?
It is depends on the NuGet manager type, packages.config or PackageReference.
If the project use packages.config, project name will be put in the Manage Packages for Solution dialog. If the project use PackageReference, project file name and relative path will be put in it. That because NuGet will update the project file .csproj when we install the nuget package with PackageReference. So, in the the Manage Packages for Solution dialog, it shows the relative path+project file name, like ClassLibrary1\ClassLibrary1.csproj.
Why is NuGet creating those temporary files in the output folder for
Module C but not Module's A or B?
That because NuGet with PackageReference controls the msbuild items that are generated for these files into the obj\projectname.csproj.nuget.g.props, obj\projectname.csproj.nuget.g.targets and project.assets.json file.
You can unload your project, check if the project file MyCompany.ModuleCuse the PackageReference, like:
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>11.0.2</Version>
</PackageReference>
</ItemGroup>
For some more details, please check this official blog: NuGet is now fully integrated into MSBuild.

MSBuild to apply a nuget package to a project at build time

I have a cmake project that builds fine on Linux and that I want to build also on Windows. The code is portable and is made of C++ so... it should build. The only thing is that, on Windows, I need to use nuget to restore some packages, cpprestsdk is one of them. Now when I run
cmake .
CMake will generate solution files and projects files that I don't want to include in my VCS at all. The thing I want MSBuild to do is to apply the packages contained in my packages.config to all the project files found in the project directory.
Anyone knows how?
The thing I want MSBuild to do is to apply the packages contained in my packages.config to all the project files found in the project directory. Anyone knows how?
I am afraid you can not do such things. That because whether you are using MSBuild or NuGet to do this thing, you have to use to the nuget.exe to do it. However, install nuget packages to the project file relies on VS capabilities not nuget.exe and nuget team not plan to bring it to the exe.
The NuGet Command Line does not actually install any packages. The install command is actually doing a restore operation.
This means that nuget.exe install will only download and extract the package into the output location. It will not modify the project file. Although, the package manager console seem to offer "Install-Package" for doing this, but you have to open each project files with Visual Studio and execute Install-Package in the package manager console for each project files, which is not what you want. So you could not enable this script outside of visual studio.
So we could not use MSBuild to apply the packages contained in the packages.config to all the project files found in the project directory.
You can refer to this thread and this thread for details.
Hope this helps.

Where are nuget package manager include directories set in VS 2015?

i am currently trying my first steps with nuget package manager (3.4.3.855) in VS 2015 (Enterprise). For my C++/Qt project i managed to find some libraries i need and they seem to be correctly downloaded to <myprojectDir>/packages/<package_name>/... folders.
However, it is a mystery to me, where and how include folders for headers and/or libs are specified for the project?
I mean, for example with the Eigen library, after importing the nuget package i can just #include <Eigen/core>, which is located in
<myprojectDir>\packages\Eigen.3.2.9\build\native\include
and everything works fine, but i neither have the packages\Eigen.3.2.9\build\native\include-path popping up in the VC++ Directories->Include Directories list in the property pages nor is there a custom property page in the project properties (yes, i did not click the solution properties ;) ) as seen e.g. in this example video with the zlib package. I do not even have this property page if I install the zlib package.
While it seems to work somehow under the hood for Eigen, it does not for the Visual Leak Detector (vld) package... so knowing how things work would be great ;)
Thanks for any help...
From NuGet 2.5, C++ project recognizes the installed packages through MSBuild properties and targets files from NuGet package. After installing packages in C++ project, the MSBuild files are imported into your project file. So the projects will know how to find and use the contents of the NuGet Packages.
To make MSBuild integration better, NuGet has created a new convention for automatically importing MSBuild properties and targets from a NuGet package. Alongside the existing \content, \lib, and \tools folders, NuGet now recognizes a new top-level folder: \build. You could open the Eigen package that you have installed through NuGet Package Explorer, there has a \build folder and a Eigen.targets file which contains MSBuild properties.
Please refer to the MSBuild Integration part from below link:
http://blog.nuget.org/20130426/native-support.html