我想将针对.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及更高版本使用什么条件?
答案 0 :(得分:0)
好像我在这个很好的article中找到了解决方案。使用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