当.Net Framework+;标准&x2B;核心合并

当.Net Framework+;标准&x2B;核心合并,.net,.net-core,nuget,.net-standard,packagereference,.net,.net Core,Nuget,.net Standard,Packagereference,问题: 如何在具有3个平台的VisualStudio2017解决方案中管理nuget软件包: .Net标准1.3 .Net Framework 4.6 .Net核心1.0 ? 我喜欢PackageReference方法,但我不知道如何使用它。他们谈论: <ItemGroup> <!-- ... --> <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" /

问题:

如何在具有3个平台的
VisualStudio2017
解决方案中管理nuget软件包:

  • .Net标准1.3
  • .Net Framework 4.6
  • .Net核心1.0

我喜欢
PackageReference
方法,但我不知道如何使用它。他们谈论:

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
    <!-- ... -->
</ItemGroup>

  • 这是否意味着,一般来说,我需要为每个框架/标准/核心至少提供3个PackageReference
  • 当我们使用
    .Net Framework 4.6
    时,如何管理版本
  • 由于nuget版本兼容性问题,当我无法运行控制台
    .net core
    应用程序引用
    .net standard
    lib时,我也遇到了这个问题
此外,我想提到的是,我看到了几篇文章,其中指出
.csproj
s回来了,不需要
.xproj
project.json
。就我个人而言,我喜欢像以前那样处理
.csproj
s


上下文:

我不是以英语为母语的人,我对非琐碎的nuget用法和
.Net
Core
/
标准开发非常陌生

我正在准备将
.Net Framework
应用程序移植到
.Net
Framework
+
标准
+
核心
。 这现在只是一个WPF应用程序。但在未来,它的目的是保持WPF应用程序不变,但也将有一个新的
.Net Core
分支,从现有逻辑中提升。 我不知道可能的新
.Net Core
分支的具体计划是什么。最有可能的是,计划创建一个
ASP.Net核心
网站。 我可以肯定的是,任务是保持逻辑作为
.netframework
(使用wpfui)运行,并将其实现为
.netcore

我决定使用
框架
+
标准
+
核心
的组合作为解决方案,因为它很简单。我的意思是这个概念很容易理解:两个分支(FWK,Core)使用基类(标准)。 代码中不需要多目标或指令(条件编译)。 这意味着新的解决方案应该通过复制粘贴和修改从头开始创建。 仍然不能百分之百肯定这个决定的合理性

但问题意味着要采取这种方法:
框架
+
标准
+
核心



我希望这个问题是合理的;我的意思是,在这种情况下,有效管理nuget软件包是成功的跨平台项目的良好开端。谢谢

注意:我假设您在这里使用的是新的SDK csproj格式,类似于:

<TargetFrameworks>netstandard1.3;net46;netcoreap1.0</TargetFrameworks>
这给了我(努吉语):

但是,;我本可以把一切都留给你的:

  <ItemGroup>
    <PackageReference Include="System.Data.Common" Version="4.3.0" />
    <PackageReference Include="System.Reflection" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit.ILGeneration" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
    <PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
    <PackageReference Include="System.Security.Permissions" Version="4.5.0" />
  </ItemGroup>


而且它会工作得很好——只是:
net461
目标会列出依赖项。我还可以列出每个目标框架的完全不同的依赖项。

当您停留在.NET framework 4.6上时,一定要为
net46
netstandard20
创建一个多目标核心库。将目标定位于
netstandard13
是毫无意义的,因为那里的API非常有限,并且您不需要支持像WP或Silverlight这样的遗留平台。用
PackageReference
做实验,你甚至不需要问第一个问题。“由于nuget版本兼容性问题,我无法运行引用.net标准库的console.net核心应用程序时,我也遇到了这个问题。”@LexLi它不是“毫无意义的”—除非您积极尝试针对某些底层框架,如windows,否则它通常不会有用phone@LexLi,太多了!也许多目标定位是个好主意。至于版本兼容性问题:我无法在vs17中运行引用netstandard1.3库的netcore1.0控制台应用程序(请参阅下一条评论)。谢谢@LexLi,输出:程序“[12780]dotnet.exe”已退出,代码为-2147450751(0x80008081)。程序“[1996]iisexpress.exe”已退出,代码为0(0x0)。
  <ItemGroup>
    <PackageReference Include="System.Data.Common" Version="4.3.0" />
    <PackageReference Include="System.Reflection" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit.ILGeneration" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
    <PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
    <PackageReference Include="System.Security.Permissions" Version="4.5.0" />
  </ItemGroup>