0Pricing
C# Academy · 课时

库与应用的 .csproj 及语义化版本

理解库与应用的 .csproj,了解 NuGet 如何使用库,以及语义化版本(MAJOR.MINOR.PATCH)如何指导发布。

库与应用的 .csproj 及语义化版本 是 CoddyKit 上的免费 C# Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 3 节课。

概念与目标

目标:了解何时创建库而不是应用,以及版本如何表示变化。

  • 库 .csproj:用于被引用并打包为 NuGet 包
  • 应用 .csproj:为最终用户生成可执行文件
  • 语义化版本控制:MAJOR.MINOR.PATCH

库与应用:快速了解

  • 库:面向多个目标框架以最大限度地复用;包含元数据(PackageId、版本、作者)。
  • 应用:包含入口点;会发布可运行的输出。
  • NuGet 会将库打包为 .nupkg;应用通常会发布,而不是打包。

程序集版本演示

库会公开一个版本;使用者引用该包时可以看到此版本。

using System;
using System.Reflection;

// Simple demo: read the assembly version at runtime.
// In a packed library, this reflects the version consumers see.
public class Program
{
  public static void Main(string[] args)
  {
    Version v = Assembly.GetExecutingAssembly().GetName().Version;
    Console.WriteLine("Assembly version: " + (v == null ? "unknown" : v.ToString()));
  }
}

SemVer 比较(基础)

比较版本以决定更新:先比较 MAJOR,再比较 MINOR,最后比较 PATCH。

using System;

// Minimal SemVer (MAJOR.MINOR.PATCH) parsing and comparison.
// Ignores prerelease/build metadata for simplicity (good enough for beginners).
public class SemVer : IComparable<SemVer>
{
  public int Major;
  public int Minor;
  public int Patch;

  public static bool TryParse(string s, out SemVer v)
  {
    v = null;
    if (string.IsNullOrEmpty(s)) return false;
    string[] parts = s.Split('.');
    if (parts.Length < 3) return false;
    int a, b, c;
    if (!int.TryParse(parts[0], out a)) return false;
    if (!int.TryParse(parts[1], out b)) return false;
    if (!int.TryParse(parts[2], out c)) return false;
    v = new SemVer { Major = a, Minor = b, Patch = c };
    return true;
  }

  public int CompareTo(SemVer other)
  {
    if (other == null) return 1;
    if (Major != other.Major) return Major.CompareTo(other.Major);
    if (Minor != other.Minor) return Minor.CompareTo(other.Minor);
    return Patch.CompareTo(other.Patch);
  }

  public override string ToString()
  {
    return Major + "." + Minor + "." + Patch;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    SemVer a, b;
    if (SemVer.TryParse("1.4.2", out a) && SemVer.TryParse("1.5.0", out b))
    {
      int cmp = a.CompareTo(b);
      Console.WriteLine(a + " vs " + b + " -> " + (cmp < 0 ? "older" : (cmp > 0 ? "newer" : "equal")));
    }
  }
}

版本递增规则

递增规则:

  • MAJOR:会破坏兼容性的 API 更改
  • MINOR:新增功能,且向后兼容
  • PATCH:错误修复或维护工作,不更改 API

提示:在简短的变更日志中说明更改。

打包前检查清单

  • 已设置库的目标框架(例如 netstandard)
  • 已填写 PackageId、版本和作者
  • 已包含许可证和说明文件
  • 已检查公共 API 是否存在破坏性更改

SemVer 规则

快速检查:按照语义化版本控制,哪种更改通常需要递增 MAJOR 版本?

回顾

回顾:构建库以便复用和打包到 NuGet;应用是可执行文件。使用 MAJOR.MINOR.PATCH 安全地传达更改。

常见问题解答

「库与应用的 .csproj 及语义化版本」课时是免费的吗?

是的 — 「库与应用的 .csproj 及语义化版本」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 3 节课。

「库与应用的 .csproj 及语义化版本」这节课中我会学到什么?

理解库与应用的 .csproj,了解 NuGet 如何使用库,以及语义化版本(MAJOR.MINOR.PATCH)如何指导发布。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「库与应用的 .csproj 及语义化版本」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 库与应用的 .csproj 及语义化版本
  2. 打包并发布到 NuGet
  3. 多目标框架
← 返回 C# Academy