正确定位多个框架时如何使用条件符号(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 及更高版本使用什么条件?
看来我找到了一个非常好的解决方案 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
我想将一个以 .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 及更高版本使用什么条件?
看来我找到了一个非常好的解决方案 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