发布.NET Core项目到Nuget - 应该使用哪个框架版本?

4

简化版

我正在构建一个 .NET Core 库,目标框架为 netstandard1.6 + dnxcore50project.json 中。我的二进制文件被构建到与名称匹配的文件夹中。MSDN 的 Nuget 命名约定 表示 dnxcore50 是一个 “已弃用” 的框架 - 所以我只需要将我的文件夹重命名为netcore50或者选择另一个框架?

我使用的是 VS 2015 Community 和 DotNetCore.1.0.1 SDK。

详细版

我维护一个名为 FluentFTP 的 FTP 库。我已经成功地使用 VS 2015 Community 编译了针对 .NET Core 的版本。我的 project.json 如下:

{
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "System.IO": "4.3.0.0",
    "System.Net.NameResolution": "4.3.0.0",
    "System.Net.Sockets": "4.3.0.0",
    "System.Net.Security": "4.3.0.0"
  },
  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    },
    "dnxcore50": {
    }
  }
}

我复制了另一个项目的“框架”部分,因为我不知道该使用什么格式。正如您所看到的,我正在针对.NET Core 5.0(显然)和.NET Standard 1.6。我可以成功地构建,所以我假设我已经构建了.NET Standard 1.6和.NET Core 5.0版本(我是正确的吗?)。当我构建时,我会得到这样的目录结构:
  • dnxcore50
  • netstandard1.6
  • net20
  • net40
为了将多框架库发布到nuget,MSDN称您需要遵循特定的命名约定。不幸的是,在命名约定文章中,dnxcore50被标记为“已弃用的框架”。这是否意味着:
1. 我正在构建错误/过时的框架类型? 2. 我只需要将文件夹dnxcore50重命名为netcore50并发布即可?
3个回答

0

只需将其发布到名为dnxcore50的文件夹中即可。虽然这是一个稍微老一点的命名约定,但该库仍可安装在使用VS 2015创建的.NET Core项目中。我已经测试过了,它可以正常工作。要独立验证,请尝试通过VS 2015中的“管理此项目的Nuget包”对话框,在.NET Core项目中安装FluentFTP

编辑:有关VS 2017,请参见此答案中的解决方案


它是否也适用于使用新的 .Net Core 项目系统的 VS2017? - svick
@svick - 请查看此链接:http://stackoverflow.com/questions/42856619/the-reference-assemblies-for-framework-dnxcore-version-v5-0-were-not-found/42856620#42856620 - Robin Rodricks

0

我想说的是,这只是我的观点(实际上是哲学问题),但我认为它可以被视为对问题的相关回答:

一般来说,你应该只要求你实际使用的内容,而不要过多。这意味着你应该使用最旧版本的框架和语言,以及你使用的功能。如果与新版本完全兼容(理想情况下,你应该定期在所有新框架版本上测试你的代码)。如果不兼容,但你仍然想支持它(因为你和/或其他人仍在使用它来支持遗留代码),你应该考虑为不同平台构建单独的版本,有时甚至可能意味着维护某些部分代码的并行版本。

我的意思不是你应该故意限制自己使用的功能,只是为了支持旧的框架和/或语言(这是一个单独的、非常主观和依赖于上下文的问题)。我的意思是,当一个人在Windows XP机器上用C# 3.0编写整个项目,然后他的公司给他买了一台新的、闪亮的Windows 10笔记本电脑和Visual Studio 2017,并开始针对.NET Framework 4.6.2构建,尽管他甚至不知道这个框架中添加了一个新功能。

我认为可以从上述哲学中合理地例外的是框架的预发布版本(alpha、beta、ctp、rc等)- 正如我所理解的那样,这恰好符合您的情况。一旦发布,开发人员应尽快切换到该版本(但不要过早切换©)。

然而,无论何时,只要理性和灵活性与试图达到实际(或稍微高一点)的逻辑形式主义程度相结合(为了更有效的决策),就会出现例外,这种情况下就是:

  1. 在放弃广泛使用的旧版本之前,请三思而后行。在现实世界中,有时旧版本/预发布版本比新版本/正式版本更广泛地被采用,并且版本之间可能存在破坏性变化,这会使升级过程受到客观的阻碍。这也可能发生在您的情况中,我不知道在这种情况下所需的更改有多严重(需要多少工作来升级现有代码),现在有多少人正在使用旧框架版本,您在库的新版本中引入的修改有多重要(例如,如果它包含了严重的错误修复或实际上非常有用和/或使迁移到新框架更容易的新功能)。

  2. 如果这不需要太多时间、精力、自由(例如,使用您想要的新框架/语言功能)和其他资源,请继续支持即使是过时的东西,只要还有一些人选择继续使用它。如果您感到开始无法享受支持它,可以向剩余用户发送支持结束通知信和/或在您的博客、Twitter等上发布。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接