库与应用的 .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 规则
回顾
回顾:构建库以便复用和打包到 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 反馈 — 无需本地设置。
此课程中的所有课时
- 库与应用的 .csproj 及语义化版本
- 打包并发布到 NuGet
- 多目标框架