2012-11-07 42 views
10

对于github托管的开源C#项目,也可以通过NuGet使用,应该如何组织源代码?具体如下:NuGet发布的github托管项目的目录结构

  • .nuspec文件应该放在github存储库中吗?
  • .nuspec文件应与.csproj文件位于同一文件夹中吗?
  • 如果NuGet包树(/ lib,/内容的东西),因为生成,它应该在git?

我的想法是,NuGet部分与github托管是分开的,因为在项目源中可用,但.nuspec不是,因为NuGet中的发布本身不是开源操作。没有人希望每一个叉都能够建立并发布NuGet包,以便开源Foo包在画廊中最终成为'Rick's Foo'与'John's Foo'与'Alice's Foo'等。

但另一方面,我确实希望github源软件仓库作为该项目的一站式资源库,如果我打开其他笔记本电脑并从那里登录,我应该能够构建/打包/推送不重新创建整个NuGet基础设施从头开始(即只输入我的API密钥,没有其他)。

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

回答

7

我会做到以下几点:

  • 提交旁边.csproj文件
  • 添加nuget.config文件,该文件moves the packages folder的水平了.nuspec文件。
  • 使溶液中的package restore提交的NuGet包库
  • 的内容创建一个MSBuild文件(或任何你喜欢的构建车辆),其中有:
    • 一个“建”目标,其构建源代码并创建nuget包
    • 将“NuGet”包推送到nuget.org并将您的API密钥作为参数的“发布”目标。

我个人保持NuGet包在.nuspec文件的版本号和手动更新它,当我做一个“放”。这样我可以标记我推送到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\ 

注意在包装这个bug的还原功能,它会忽略您配置的程序包的位置。 http://nuget.codeplex.com/workitem/1990 ==>这固定在Nuget 2.7中

0

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

packages/ 

这会犯排除的NuGet packages文件夹。当您构建新的签出源代码时,软件包将被下载并恢复。确保包恢复设置已启用,但我认为它已在v2.8中默认启用。