对于一个 github 托管的开源 C# 项目,它也可以通过 NuGet 获得,应该如何组织源代码?具体来说:
- .nuspec 文件应该在 github 存储库中吗?
- .nuspec 文件是否应与 .csproj 文件位于同一文件夹中?
- 既然生成了 NuGet 包树(/lib、/content 东西),它应该在 git 中吗?
我的想法是 NuGet 部分与 github 托管是分开的,因为在项目源中可用但 .nuspec 不可用,因为 NuGet 中的发布本身不是开源操作。 None 不希望每个分支都构建和发布一个新 NuGet 程序包,这样开源 Foo 程序包最终在画廊中作为“Rick's Foo”与“John's Foo”与“Alice's Foo”等等
但另一方面,我确实希望 github 源代码仓库充当项目的一站式存储库,如果我打开我的另一台笔记本电脑并从那里登记,我应该能够构建/打包/推送 w/o 从头开始重新创建整个 NuGet 基础结构(即仅输入我的 API key ,仅此而已)。
这两个要求相互矛盾,我是不是漏掉了什么明显的东西?
最佳答案
我会做以下事情:
- 在
.csproj
文件旁边提交.nuspec
文件 - 添加一个
nuget.config
文件 moves the packages folder一个级别。 - 启用package restore在解决方案中不提交 NuGet 包存储库的内容
- 创建一个 msbuild 文件(或您喜欢的任何构建工具),其中包含:
- 构建源代码并创建 nuget 包的“构建”目标
- 将 NuGet 包推送到 nuget.org 并将您的 API key 作为参数的“发布”目标。
我个人在 .nuspec
文件中维护 nuget 包的版本号,并在我做“发布”时手动更新它。这样我就可以标记我推送到 NuGet 提要的确切版本。
使用此设置,Visual Studio 中的构建不会生成 NuGet 包,但存储库中提供了所有工具来执行此操作。
文件夹结构如下所示:
.\Docs\ ==> not in source repo
.\Packages\ ==> not under source control
.\Src\ ==> git repo here
.\Src\MySolution.sln
.\Src\.gitignore
.\Src\MuRules.ruleset
.\Src\build.proj ==> msbuild file to build everything.
.\Src\MyProject\MyProject.csproj
.\Src\MyProject\MyProject.nuspec
.\Src\MyProject\nuget.config
.\Build\ ==> not under source control
.\Build\Debug\
.\Build\Release\
.\Build\Publish\
请注意包还原功能中的这个错误,它会忽略您配置的包位置。 http://nuget.codeplex.com/workitem/1990 ==> 这已在 Nuget 2.7 中修复
关于c# - NuGet 发布的 github 托管项目的目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272672/