NuGet发布的github托管项目的目录结构

时间:2012-11-07 15:22:14

标签: c# github open-source nuget

对于github托管的开源C#项目,也可以通过NuGet获得,如何组织源代码?具体做法是:

  • .nuspec文件应该在github存储库中吗?
  • .nuspec文件应该与.csproj文件位于同一个文件夹中吗?
  • 如果生成了NuGet包树(/ lib,/ content stuff),它应该在git中吗?

我的想法是NuGet部分与github托管是分开的,因为在项目源中可用,但.nuspec不是,因为NuGet中的发布不是开源操作本身。没有人希望每个分支构建和发布一个新的 NuGet包,这样开源Foo包最终会在库中以'Rick's Foo'与'John's Foo'对比'Alice's Foo'等。

但另一方面,我确实希望github源代码库充当项目的一站式存储库,如果我打开我的其他笔记本电脑并从那里登记,我应该能够构建/打包/推送w / o从头开始重新创建整个NuGet基础架构(即只输入我的API密钥,仅此而已)。

这两个要求相互矛盾,我是否错过了一些明显的东西?

2 个答案:

答案 0 :(得分:7)

我会做以下事情:

  • 提交.nuspec文件旁边的.csproj文件
  • 添加nuget.configmoves the packages folder级别的文件。
  • 在解决方案中启用package restore并执行 NOT 提交NuGet包存储库的内容
  • 创建一个msbuild文件(或您喜欢的任何构建工具),它具有:
    • 构建源并创建nuget包的“构建”目标
    • 一个“发布”目标,它将NuGet包推送到nuget.org并将您的API密钥作为参数。

我个人在.nuspec文件中维护nuget包的版本号,并在我执行“发布”时手动更新它。这样我就可以标记我推送到NuGet feed的确切版本。

使用此设置,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中已得到修复

答案 1 :(得分:0)

在nuget v2.8上,我只需要修改.gitignore并添加:

packages/

这将从提交中排除nuget packages文件夹。构建新的签出源代码时,将下载并还原包。确保已启用包恢复设置,但我认为它已在v2.8上默认启用。