正确定位多个框架时如何使用条件符号 (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()method; 所以,我已经在我的.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 及更高版本使用什么条件?


胡子哥哥
浏览 180回答 1
1回答

慕莱坞森

看起来我在这篇非常好的文章中找到了解决方案。使用NETFULL条件符号(来自文章,但任何名称都可以)应该是一个解决方案:<PropertyGroup Condition=" '$(TargetFramework)' == 'net461'">&nbsp; <DefineConstants>NETFULL</DefineConstants></PropertyGroup><PropertyGroup Condition=" '$(TargetFramework)' == 'net47'">&nbsp; <DefineConstants>NETFULL</DefineConstants></PropertyGroup>然后是代码:#if NETFULLif (someFolderVar.StartsWith("~/"))&nbsp; &nbsp;someFolderVar = System.Web.Hosting.HostingEnvironment.MapPath(someFolderVar);#endif
打开App,查看更多内容
随时随地看视频慕课网APP