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

Rem*_*anu 10 c# open-source github nuget

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

  • 应该.nuspec文件是否在github存储库中?
  • .nu​​spec文件应该与.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密钥,仅此而已).

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

Fil*_*Vos 7

我会做以下事情:

  • 提交.nuspec文件旁边的.csproj文件
  • 添加一个nuget.config文件,将包文件夹移动一级.
  • 在解决方案中启用包还原,不要提交NuGet包存储库的内容
  • 创建一个msbuild文件(或任何你喜欢的构建工具),它具有:
    • 一个"构建"目标,它构建源并创建nuget包
    • 一个"发布"目标,它将NuGet包推送到nuget.org并将您的API密钥作为参数.

我个人在.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\
Run Code Online (Sandbox Code Playgroud)

请注意"程序包还原"功能中的此错误,它将忽略您配置的程序包位置.http://nuget.codeplex.com/workitem/1990 ==>这在Nuget 2.7中得到修复