我創建了multy框架項目。我使用這樣的事情:如何在編譯#if語句中設置.NET Core
#if NET40
Console.WriteLine("hello from net 4");
#endif
但我找不到通配符的.NET核心。我試過了:
#if NETCOREAPP1.0
Console.WriteLine("hello from net Core");
#endif
但它是無效聲明。 謝謝。
我創建了multy框架項目。我使用這樣的事情:如何在編譯#if語句中設置.NET Core
#if NET40
Console.WriteLine("hello from net 4");
#endif
但我找不到通配符的.NET核心。我試過了:
#if NETCOREAPP1.0
Console.WriteLine("hello from net Core");
#endif
但它是無效聲明。 謝謝。
使用NETCOREAPP1_0
以上怨恨NETCOREAPP1_1
和NETCOREAPP2_0
文章https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/libraries包括不同的預處理符號列表。
的.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框架4.6 - > NET46
.NET框架4.6.1 - > NET461
.NET框架4.6.2 - > NET462
。 NET標準1.0 - > NETSTANDARD1_0
.NET標準1.1 - > NETSTANDARD1_1
.NET標準1.2 - > NETSTANDARD1_2
.NET標準1.3 - > NETSTANDARD1_3
。 NET標準1.4 - > NETSTANDARD1_4
.NET標準1.5 - > NETSTANDARD1_5
.NET標準1.6 - > NETSTANDARD1_6
您可以定義下列方式的任何自定義條件編譯符號(project.json):這種做法似乎是,因爲你可能更實際
"frameworks": {
"net40": {
"buildOptions": {
"define": ["NET_40"]
}
},
"netstandard1.5": {
"buildOptions": {
"define": [ "NET_STANDARD" ]
}
}
}
使用多個目標相同情況的符號,而不需要寫類似
#if NET20 && NET 40 && NET45
雖然上述這一個答案是正確的,但應注意的是,在.NET中的錯誤Core xproj項目類型。通過項目設置定義條件編譯符號時,它將該元素定義爲「定義」,但這是不正確的。它應該創建一個名爲「define」的元素。您可以通過手動編輯project.json來解決該問題。
我在兩處記錄了微軟的這個錯誤。請花點時間向微軟註冊您的煩惱,以便他們最終能夠解決問題並且不會爲他人造成這種悲傷。
這個討論有問題的有步驟的攝製,和截圖的詳細解釋:https://github.com/dotnet/cli/issues/4022#issuecomment-238777946
對於新的Visual Studio 2017年的csproj項目系統.. 。
你可以在這裏找到可用符號的完整列表: https://docs.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget
您可以創建合成的C- onstant(個),在.csproj的文件,像這樣:
<PropertyGroup Condition="'$(TargetFramework)' == 'net451' Or '$(TargetFramework)' == 'net461' ">
<DefineConstants>FULLFRAMEWORK;FULL</DefineConstants>
</PropertyGroup>
然後你可以使用它在一個#if
編譯器指令,像這樣:
#if FULLFRAMEWORK
private bool DoSomethingFullFrameworkSpecific()
{
var connectionStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName];
return connectionStringSetting != null;
}
#endif
更改到'#如果NETCOREAPP1_0' –
是,更換'.'帶'_' – MartinHN
@KiranChalla我認爲你應該將其作爲答案。 – svick