Referencing a .net 3.5 version of a nuget package from a .net 4 project - nuget

I want to make my .net 4 project load the .net 3.5 version of a nuget package so that other .net 3.5 references don't get the nuget dll overwritten in the output directory.

Yikes! If the package has a .NET 3.5 and a .NET 4 version of the DLL, there's no real way to do that other than changing your project to target 3.5 itself.
I can think of a couple of workarounds though. They're not ideal, but they'd probably work.
After you install the nuget package, go into the "packages" directory (it'll be next to your solution (.sln) file. Find the package. Delete the "\lib\net40" folder. This way, NuGet will reference the next version down. You'll have to manually change the assembly reference. Note if you even upgrade this package, you'll have to do this again.
You could create a custom version of this package that only contains your 3.5 version of the DLL. Perhaps put this up in a custom feed at http://myget.org/ and install it from there.
One of those ought to work.

Related

VS2017 Setup project for .NET 4.7.2

Having configured a Setup project for my .NET 4.7.2 codebase the Detected Dependencies shows up with a netstandard.dll.
Is there anyway to tell where this might be coming from?
Again it's just an entire 4.7.2 based code with that target Framework chosen.
The Prerequisites Page has the 4.7.2 chosen and the Launch condition has 4.7.2.
What could be causing the netstandard.dll to be included in the project output?
What could be causing the netstandard.dll to be included in the
project output?
First, thanks to magicandre1981 for all his help.
You have referenced a net standard nuget packages in your Net Framework 4.7.2 project. And because of the special nature of the package, it needs to refer to netstandard.dll as a runtime environment.
Although Net Frameowork 4.7.2 optimizes the build output file, so netstandard.dll cannot be shown in the project outputpath, but in fact the project will still use it at runtime.
But for the setup project, there is no such feature. Using the netstandard nuget package, all references will be displayed in Detected Dependencies including netstandard.dll.
In addition, Net Standard 2.0 is compatible with Net Frameowork 4.7.2, and you can refer to this document.

Nugets packages from .net Standard 2.0 projects not showing in NuGet packages tab in TeamCity

We have a .net solution that contains .net standard 2.0 projects and .net framework projects.
On each build with TeamCity we have a step with NuGet Installer to restore the nuget packages for solution (nuget version 4.3.0). The step works fine, it restores the nuget packages but on Nuget Packages tab at Used Packages section we see only the nugets from .net framework projects.
Only the .net framework projects have packages.config file, the .net standard 2.0 ones doesn't have this files because nuget package manager uses PackageReference by default (as stated here https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files) so the nugets used are included in .csproj files.
What can be done in order for nuget packages for .net standard 2.0 projects show up on on Nuget Packages tab at Used Packages section ?
Thank you,
Adriana
Seems is a known issue of TeamCity, and if we need it fixed we should vote for it here: https://youtrack.jetbrains.com/issue/TW-52327
If anyone else has a workaround till is fixed please post it :)

Nuget Package supporting multiple versions of their dependency

I'm looking for some experience or thoughts on the following problem.
I have a Nuget Package (EntityFrameworkExtras 1.2.0) thats hosted on the main Nuget Feed.
This package has a dependency on EntityFramework. Everything was hunky dorey until EntityFramework 6 was released.
A change in the EntityFramework code means that my package no longer works with EntityFramework 6 and onwards.
I'm trying to consider how best to deal with this problem, i foresee two options:
1) Maintain 2 versions of the Package
So, i would have one version of the package that is compiled with EntityFramework 5.0.0 and the .nuspec would
dictate that it is dependant on EntityFramework [0.0.0 - 5.0.0]
I would introduce a new package called EntityFrameworkExtras (ef6). This package would be compiled in EntityFramework 6.0.0
and the .nuspec would dictate that it is dependant on EntityFramework [6.0.0 >= *]
2) Have a new version of the current package that would support EntityFramework 6.0
so the currently version would support EntityFramework 5.0.0 and less
and i would add a new version of the package (version 2.0.0) that would depend on EntityFramework 6.0.0 [6.0.0 >= *]
I went for option 1) in the end. I believe this is an easier option for the user of the packages because its clear what each of the package's dependencies are.
I also believe its easier to use the nuget commands when working with different packages, rather then attempting to be aware that different versions of one package have different dependency versions.
Also from a development perspective it cleaner and easier to develop and fix bugs on the different packages. Finally, it would make a continuous integration environment easier to implement, because each package would be consider a different project.

How do I find the right NuGet package for my framework version

I need the Microsoft ASP.Net Web Pages NuGet package, but I need the version which targets .net 4.0
How do I figure this out?
Is there a way to figure this out for any given NuGet Package?
The later versions of the Microsoft.AspNet.WebPages NuGet package only support .NET 4.5
The older version 2.0.30506.0 supports .NET 4.0
To figure this out I used the NuGet Package Explorer, displayed the list of package versions and opened a few of the NuGet packages to see what .NET frameworks they support. As far as I am aware you cannot get the supported .NET frameworks from the metadata returned by the nuget.org OData feed. The only way I know is to look inside the NuGet package itself.

Entity Framework 4.3 Multi-project installation

I'm confused with regards to my code using latest Entety Framework.
I have 2 projects in the solution. I've used t4 templates to generate Self-Tracking Entities.
In project #1 I have just .edmx files and Entety Framework 4.3 installed thru NuGet PM. Now my second project has template-generated Context classes. So how do I make sure my second project also uses EF 4.3? Do I need to install it separatly for every project in my solution or can I just reference EntityFramework.dll? Thanks.
The Entity Framework package installation is project specific. I'd install it separately, so NuGet can manage the references.
To manage the package installation for multiple projects, open NuGet PM for Solution with
"Tools->Library Package Manager->Nuget Package Manager for Solution..."
Go to the Installed tab (or Online), select EntityFramework and click Manage. Check/Uncheck the projects where to install EntityFramework.
Or, in the console pass the -ProjectName property to the install-package command.