[英].NET targeting multiple frameworks in VS2017. How to get IDE to target specific preprocessor directive?
[英]How to use conditional symbols when targeting multiple frameworks correctly (VS2017)
我想將一個針對.NET Framework 4.6.1的庫項目遷移到一個針對.NET Framework 4.6.1和.NET Standard 2.0的新項目。
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
</PropertyGroup>
在我當前使用的代碼中,例如: System.Web.Hosting.HostingEnvironment.MapPath()
方法; 所以,我已經在我的.csproj
文件中添加了一個條件:
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System.Web" />
</ItemGroup>
現在在我的代碼中,我知道我可以有這樣的東西:
#if NET461
if (someFolderVar.StartsWith("~/"))
someFolderVar = System.Web.Hosting.HostingEnvironment.MapPath(someFolderVar);
#endif
我的問題:
如果稍后我將我的項目更改為目標.NET Framework 4.7,是否將執行上述代碼或僅嚴格針對.NET Framework 4.6.1? 4.6.1及以上的使用條件是什么?
看起來我在這篇非常好的文章中找到了解決方案。 使用NETFULL
條件符號(來自文章,但任何名稱都可以)應該是一個解決方案:
<PropertyGroup Condition=" '$(TargetFramework)' == 'net461'">
<DefineConstants>NETFULL</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net47'">
<DefineConstants>NETFULL</DefineConstants>
</PropertyGroup>
然后是代碼:
#if NETFULL
if (someFolderVar.StartsWith("~/"))
someFolderVar = System.Web.Hosting.HostingEnvironment.MapPath(someFolderVar);
#endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.