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

标签 c# github open-source nuget

对于一个 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/

相关文章:

linux - Docker 克隆 - 权限被拒绝

Github认为 merge 后分支不同

visual-studio - 与Visual Studio集成的Visual Sourcesafe替代品

c# - C#和Windows Forms中有没有对应PostMessage的?

c# - 当目标设置为异步时,NLog 不会刷新缓冲日志

Git错误 "fatal: invalid branch name: init.defaultBranch ="

在 Cygwin 中构建具有 LAME 支持的 SoX

linux - 如果 GNU/Linux 中的实用程序是从 UNIX 复制而来的,它们怎么会是免费和开源的呢?

c# - 在 C# 控制台应用程序中呈现 SSRS;在哪里可以找到 SSRS ReportExecutionService?

c# - InfoPath C# 中的权限类