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

时间:2018-08-29 16:42:59

标签: c# .net-standard-2.0

去年,我向Network library添加了.NET Standard 2.0支持。我确实通过创建第二个(.NET Standard)项目来实现此目的,并且基本上复制并粘贴了源代码。经过一些调整,就可以开始了。

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

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

我目前可以想到的解决方案是创建一个共享库,其中包括所有跨项目类。还是有一个更流畅的解决方案?

2 个答案:

答案 0 :(得分:4)

使用建议的解决方案解决了问题。 .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中。

EDIT:只有两个TargetFrameworks都不支持这些软件包时,才需要手动编辑。只需更改设置-> NuGet-Paket-Manager->默认格式-> PackageReference

enter image description here

答案 1 :(得分:1)

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

html

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

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