为了账号安全,请及时绑定邮箱和手机立即绑定

正确定位多个框架时如何使用条件符号 (VS2017)

正确定位多个框架时如何使用条件符号 (VS2017)

C#
胡子哥哥 2021-08-22 17:38:57
我想将一个针对 .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 及更高版本使用什么条件?
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

看起来我在这篇非常好的文章中找到了解决方案。使用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


查看完整回答
反对 回复 2021-08-22
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信