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

时间:2017-02-25 09:09:07

标签: c# .net nuget .net-core

TL; DR版本

我正在构建一个.NET Core lib,目标是netstandard1.6中的dnxcore50 + project.json框架。我的二进制文件内置在具有匹配名称的文件夹中。 MSDN's Nuget naming conventiondnxcore50是一个“已弃用”的框架 - 我应该将我的文件夹重命名为netcore50还是应该完全定位另一个框架?

我正在使用VS 2015社区和DotNetCore.1.0.1 SDK。

长版

我维护一个名为FluentFTP的FTP库。我已经使用VS 2015社区成功编译了.NET核心版本。我的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": {
    }
  }
}

我复制了另一个项目的frameworks部分,因为我不知道要使用哪种格式。正如您所看到的,我的目标是.NET Core 5.0(显然)和.NET Standard 1.6。我可以成功构建,所以我假设我已经构建了.NET Standard 1.6和.NET Core 5.0版本(我是对的吗?)。当我构建时,我得到一个目录结构,如:

  • dnxcore50
  • netstandard1.6
  • net20
  • net40

为了将多框架库发布到nuget,MSDN表示您需要关注某个naming convention

可悲的是dnxcore50naming convention文章中被标记为“弃用的框架”。这是否意味着:

  1. 我正在构建错误/过时的框架类型?

  2. 我只需要将文件夹dnxcore50重命名为netcore50并发布吗?

3 个答案:

答案 0 :(得分:0)

只需使用名为dnxcore50的文件夹发布它。虽然它的命名约定稍微过一点,但lib仍然可以在VS 2015创建的.NET Core项目中安装.I'测试了它,它的工作原理。要单独验证它,请尝试通过"管理此项目的Nuget包在.NET Core项目中安装FluentFTP" VS 2015中的对话框。

修改:对于VS 2017,请参阅solution in this answer

答案 1 :(得分:0)

恐怕这只不过是我的意见(实际上是哲学问题),尽管我觉得它可以被认为是这个问题的相关答案:

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

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

我认为上述哲学的合理例外是框架的预发布(alpha,beta,ctp,rc等)版本 - 完全符合您的情况,据我所知 。发布后,开发人员应尽快切换到它(但不会很快)。

但是,无论何种理由和灵活性与试图达到实际(或更高一点)程度的逻辑形式主义(为了更有效的决策),异常的例外情况都会出现,在这种情况下,这些是:

  1. 在放弃对仍然广泛使用的内容的支持之前,请三思而后行。在现实世界中,当旧版本/预发行版本的采用范围比新版本/发行版本广泛得多时,会出现这种情况,并且客观上阻碍升级过程的版本之间可能存在重大变化。 这可能恰好是你的情况,我真的不知道有多严重(升级现有代码需要多少工作)这种情况下的变化是,有多少人在使用旧版本框架版本到现在为止,您在库新版本中引入的修改有多重要(例如,如果它包含严重的错误修复或实际上很有用的新功能和/或更容易迁移到新框架)。 / p>

  2. 如果这不需要花费任何大量的时间,精力,自由(例如使用你想要的新框架/语言功能)和你的其他资源,只要至少支持过时的东西有些人选择继续使用它。如果您觉得自己开始没有得到支持,那么向其余用户发送支持终止通知信和/或将其发布在您的博客,Twitter等中可能很友好。

答案 2 :(得分:0)

你绝对应该删除dnxcore50。理想情况下,您应该只提供.NET Standard版本,但您可能还包括.NET Framework(netXX)。

参见一个着名的例子ANTLR,

https://github.com/tunnelvisionlabs/antlr4cs/blob/7077054ddc5fab977a9b20b971aef6798563f486/build/Antlr4.Runtime.nuspec