在多框架项目中使用特定于.NET Core的代码

时间:2018-09-25 12:20:09

标签: c# .net-core .net-standard

我的任务是在工作中开始从.NET Framework(4.7.1)到.NET Core(2.1)的“缓慢迁移”。我们有一个非常大的应用程序,不能仅仅在.NET Core中停止开发并创建一个全新的堆栈。我一直在使用.NET Standard(2.0)库作为.NET Framework和.NET Core项目的“过渡”。但是,我遇到了一些特定于Core的代码的问题。

我的.NET Core .csproj文件如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.1;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

</Project>

我不得不添加netstandard2.0并使其成为多框架,以将接口包含在我们的标准库中。

当我这样做时,尝试使用仅在Core中的代码时会遇到各种构建错误。例如,我收到以下错误:

  

“文件”不包含“ AppendAllTextAsync”的定义。

在删除.NET Framework和Standard代码之前,有什么方法可以在我们的应用程序中使用甚至拥有新功能? (我已经在新的解决方案中尝试了一个全新的.NET Core项目,在我将.csproj更改为TargetFrameworks之前,它一直运行良好。

1 个答案:

答案 0 :(得分:1)

您正在针对.NET Core 2.1和.NET Standard 2.0进行构建。 .NET Core是.NET Standard的超集,这意味着它具有该标准等。 File.AppendAllTextAsync是其中之一。

.NET Core:https://docs.microsoft.com/en-us/dotnet/api/?view=netcore-2.1&term=AppendAllTextAsync

.NET标准:https://docs.microsoft.com/en-us/dotnet/api/?view=netstandard-2.0&term=AppendAllTextAsync

因此,不幸的是,您不能只是简单地将代码与.NET标准交叉编译。如果愿意,可以使用#if表示法来编写框架特定的代码。或者,您可以坚持使用.NET Standard支持的代码,例如可以使用非异步变体:https://docs.microsoft.com/en-us/dotnet/api/?view=netstandard-2.0&term=AppendAllText