Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NuGet发布的github托管项目的目录结构_C#_Github_Open Source_Nuget - Fatal编程技术网

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

C# NuGet发布的github托管项目的目录结构,c#,github,open-source,nuget,C#,Github,Open Source,Nuget,对于github托管的开源C#项目,也可以通过NuGet获得,应该如何组织源代码?具体而言: .nuspec文件应该在github存储库中吗 .nuspec文件是否应与.csproj文件位于同一文件夹中 NuGet包树(即/lib、/content-stuff)是如何生成的,它应该是git吗 我的想法是,NuGet部分与github宿主是分开的,因为在项目源代码中是可用的,但是.nuspec不是,因为在NuGet中发布本身不是一个开源操作。没有人希望每一个fork都能构建和发布一个新的NuG

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

  • .nuspec文件应该在github存储库中吗
  • .nuspec文件是否应与.csproj文件位于同一文件夹中
  • NuGet包树(即/lib、/content-stuff)是如何生成的,它应该是git吗
我的想法是,NuGet部分与github宿主是分开的,因为在项目源代码中是可用的,但是.nuspec不是,因为在NuGet中发布本身不是一个开源操作。没有人希望每一个fork都能构建和发布一个新的NuGet包,这样开源的Foo包就会以“Rick'sfoo”对“John'sfoo”对“Alice'sfoo”等形式出现在图库中

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


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

我会做以下几点:

  • 提交
    .csproj
    文件旁边的
    .nuspec
    文件
  • 添加一个
    nuget.config
    文件,该文件将升级
  • 在解决方案中启用,不提交NuGet包存储库的内容
  • 创建具有以下内容的msbuild文件(或任何您喜欢的生成工具):
    • 一个“构建”目标,它构建源代码并创建nuget包
    • 一个“发布”目标,它将NuGet包推送到NuGet.org,并将您的API密钥作为参数
我个人在
.nuspec
文件中维护nuget包的版本号,并在执行“发布”时手动更新。通过这种方式,我可以标记我推送到NuGet提要的确切版本

使用此设置,VisualStudio中的内部版本不会生成NuGet包,但存储库中提供了用于生成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\

请注意程序包还原功能中的此错误,它将忽略您配置的程序包位置。==>这在Nuget v2.8上的Nuget 2.7中是固定的,我只需要修改
.gitignore
并添加:

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