目标 .NET 4.x 和 .NET Standard 2.0

Target .NET 4.x and .NET Standard 2.0

去年我为 Network library 添加了 .NET Standard 2.0 支持。我确实通过创建第二个(.NET Standard)项目实现了这一点,基本上是复制粘贴源代码。经过一些调整,它已准备就绪。

但是由于我是按需添加功能,所以在两个项目中更改相同的东西确实很麻烦。如果只创建一个代码库并简单地更改编译目标,那就太好了。

预编译语句不是一个选项,因为 .NET 4.x 版本还包含一些 NuGet 包,这些包不适用于 .NET Standard。

我目前能想到的解决办法是,创建一个共享库,包括所有的跨项目类。或者有更流畅的解决方案吗?

使用建议的解决方案解决了问题。 .csproj 如下所示

<Project Sdk="Microsoft.NET.Sdk">  
  <PropertyGroup>
    <TargetFrameworks>net46;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
  <PropertyGroup>
     <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  </PropertyGroup>
  <ItemGroup>
    <Compile Remove="packages\**" />
    <EmbeddedResource Remove="packages\**" />
    <None Remove="packages\**" />
  </ItemGroup>

  <ItemGroup>
    <!-- PackageReferences for all TargetFrameworks -->
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net46' ">
    <!-- PackageReferences for net46 TargetFramework -->
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' ">
    <!-- PackageReferences for standard2.0 TargetFramework -->
  </ItemGroup>
</Project>

目前唯一的问题:我无法使用 NuGet 包管理器。我必须手动将每个条目添加到正确的 ItemGroup 中。

编辑:仅当两个 TargetFrameworks 都不支持包时才需要手动编辑。只需更改设置 -> NuGet-Paket-Manager -> 默认格式 -> PackageReference

您可以将现有项目的源文件作为 link 添加到另一个项目。

project a
   somefile.cs

project b

右键单击项目 b,添加现有项目...导航到项目 a 中的 somefile.cs,然后添加

您可以从任一项目编辑文件...所以要小心。