簡體   English   中英

正確定位多個框架時如何使用條件符號(VS2017)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM