Can someone explain the purpose of this two in csproj file (VS2017):
netstandard1.6
win7&
The
(or
when you want have multiple targets, such as net451
, one or multiple netstandard1.x
etc). Per
/
entry one set of assemblies will be created and located inside bin\Debug\
).
This is useful, when you want to use a different library in .NET Core (because the library you used only works with full .NET Framework such as 4.5.1) or remove this feature from i.e. .NET Core because it's unsupported.
It is used for both, building and NuGet restore. i.e. you can't use a net451
only library in a .NET Core project (netstandard 1.1
for example - but you can use netstandard1.1
in a net451
project).
/
on the other side is used for NuGet mainly. It tells NuGet which packages you need. For example if you want to target Linux, Mac and Windows, certain assemblies require native libraries (such as encryption. On windows CryptoAPI will be used, but on Linux and Mac you need OpenSSL). This includes non-managed dlls and *.so (Linux) files.
i.e.
will make nuget restore packages for win7 (both x64 and x86) versions and x64 only for ubuntu. This is required, because when you work on windows you need to download these native libraries too so you deploy/package them with dotnet publish
.
Here's a little catch though: When you have a full .NET Framework reference in
or
, then you must specify a single
(singular, not plural
), otherwise you will get an error.
For example:
netstandard1.0;net451
win7-x64;win7-x86;ubuntu.16.10-x64
win7-x64