visual update tag studio net how check change asp c# asp.net-core asp.net-core-mvc .net-core asp.net-core-1.0

tag - update c# visual studio



Cómo configurar.NET Core en la instrucción#if para compilación (5)

Creo proyecto multy framework. Yo uso algo como esto:

#if NET40 Console.WriteLine("hello from net 4"); #endif

Pero no puedo encontrar comodines para .NET Core. Lo intenté :

#if NETCOREAPP1.0 Console.WriteLine("hello from net Core"); #endif

Pero no es una declaración válida. Gracias.


Extensión de la respuesta de Devon para los archivos .csproj de VS2017:

Mirando la tabla here , puede definir fácilmente las constantes usando expresiones regulares. Por lo tanto, no necesita pensar en actualizar las condiciones si se agregan / cambian los marcos de destino.

<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(''$(TargetFramework)'', ''^net/d''))"> <DefineConstants>NETFRAMEWORK</DefineConstants> </PropertyGroup> <PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(''$(TargetFramework)'', ''^netstandard/d''))"> <DefineConstants>NETSTANDARD</DefineConstants> </PropertyGroup> <PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(''$(TargetFramework)'', ''^netcoreapp/d''))"> <DefineConstants>NETCORE</DefineConstants> </PropertyGroup>

Uso:

#if NETFRAMEWORK FrameworkSpecific(); #endif #if NETSTANDARD StandardSpecific(); #endif #if NETCORE CoreSpecific(); #endif


Necesita subrayar _ lugar de un punto:

NETCOREAPP1_0 o el NETCOREAPP1_0 más reciente y NETCOREAPP2_0

El artículo https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/libraries incluye una lista de los diferentes símbolos del preprocesador.

.NET Framework 2.0: NET20

.NET Framework 3.5: NET35

.NET Framework 4.0: NET40

.NET Framework 4.5 -> NET45

.NET Framework 4.5.1 -> NET451

.NET Framework 4.5.2 -> NET452

.NET Framework 4.6 -> NET46

.NET Framework 4.6.1 -> NET461

.NET Framework 4.6.2 -> NET462

. NET Standard 1.0 -> NETSTANDARD1_0

.NET Standard 1.1 -> NETSTANDARD1_1

.NET Standard 1.2 -> NETSTANDARD1_2

.NET Standard 1.3 -> NETSTANDARD1_3

.NET Standard 1.4 -> NETSTANDARD1_4

.NET Standard 1.5 -> NETSTANDARD1_5

.NET Standard 1.6 -> NETSTANDARD1_6


Para el nuevo sistema de proyectos csproj de Visual Studio 2017 ...

Puede encontrar la lista completa de los símbolos disponibles aquí: https://docs.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget

Puede crear constantes compuestas para su archivo .csproj así:

<PropertyGroup Condition="''$(TargetFramework)'' == ''net451'' Or ''$(TargetFramework)'' == ''net461'' "> <DefineConstants>FULLFRAMEWORK;FULL</DefineConstants> </PropertyGroup>

Entonces puedes usarlo en una directiva de compilación #if así:

#if FULLFRAMEWORK private bool DoSomethingFullFrameworkSpecific() { var connectionStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName]; return connectionStringSetting != null; } #endif


Puede definir cualquier símbolo de compilación condicional personalizado de la siguiente manera (project.json):

"frameworks": { "net40": { "buildOptions": { "define": ["NET_40"] } }, "netstandard1.5": { "buildOptions": { "define": [ "NET_STANDARD" ] } } }

Este enfoque parece ser más práctico porque puede usar el mismo símbolo condicional para varios objetivos, sin necesidad de escribir algo como

#if NET20 && NET 40 && NET45


Si bien la respuesta anterior es correcta, se debe tener en cuenta que existe un error en el tipo de proyecto .NET Core xproj. Cuando define un símbolo de compilación condicional a través de la configuración del proyecto, define el elemento como "define", pero esto es incorrecto. Debe crear un elemento llamado "definir". Puede solucionar el problema editando el project.json manualmente.

He registrado este error con Microsoft en dos lugares. Por favor, tómese el tiempo para registrar su molestia con Microsoft para que finalmente logren solucionarla y no causen este dolor a los demás.

Este hilo tiene una explicación detallada del problema con los pasos para la reproducción y las capturas de pantalla: https://github.com/dotnet/cli/issues/4022#issuecomment-238777946

Este es el informe de error de Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedbackdetail/view/2983351/conditional-compilation-symbols-broken-in-net-core-projects#tabs