Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 目标.NET 4.x和.NET标准2.0_C#_.net Standard 2.0 - Fatal编程技术网

C# 目标.NET 4.x和.NET标准2.0

C# 目标.NET 4.x和.NET标准2.0,c#,.net-standard-2.0,C#,.net Standard 2.0,去年,我将.NET标准2.0支持添加到。我通过创建第二个.NET标准项目实现了这一点,基本上是复制并粘贴源代码。经过一些调整,它准备好了 但是,由于我按需添加了功能,所以在两个项目中更改相同的内容确实很麻烦。只要创建一个代码库并简单地更改编译目标就好了 预编译语句不是一个选项,因为.NET 4.x版本还包括一些NuGet包,这些包不适用于.NET标准 我目前能想到的解决方案是,创建一个共享库,包括所有跨项目类。还是有一个更平滑的解决方案?用建议的解决方案解决了问题。.csproj如下所示 <

去年,我将.NET标准2.0支持添加到。我通过创建第二个.NET标准项目实现了这一点,基本上是复制并粘贴源代码。经过一些调整,它准备好了

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

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


我目前能想到的解决方案是,创建一个共享库,包括所有跨项目类。还是有一个更平滑的解决方案?

用建议的解决方案解决了问题。.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包管理器。我必须手动将每个条目添加到正确的项目组中

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


用建议的解决方案解决了这个问题。.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包管理器。我必须手动将每个条目添加到正确的项目组中

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


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

project a
   somefile.cs

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


您可以编辑任一项目中的文件…因此请小心。

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

project a
   somefile.cs

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


您可以从任何一个项目编辑该文件…因此请小心。

为什么不为完整框架设置一个.SLN/.csproj,为引用相同源文件的标准框架设置一个?.csproj可以根据生成目标有条件地引用包。$TargetFramework conditions在.csproj中。感谢关键字。要尽快尝试吗?为什么没有一个.SLN/.csproj用于完整框架,一个用于引用相同源文件的标准框架?.csproj可以有条件地引用包,具体取决于生成目标。$TargetFramework conditions在.csproj中。感谢关键字。我会尽快试一试的