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

8 浏览
0 Comments

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

对于一个托管在Github上的开源C#项目,该项目也可以通过NuGet获取,如何组织源代码?\n具体来说:\n

    \n

  • 应该将.nuspec文件放在Github仓库中吗?
  • \n

  • 应该将.nuspec文件放在与.csproj文件相同的文件夹中吗?
  • \n

  • 至于NuGet包树(/lib,/content等),由于是生成的,应该将其放在git中吗?
  • \n

\n我认为NuGet部分与Github托管是分开的,即项目源代码可用,但.nuspec文件不可用,因为在NuGet中发布不是一个开源操作。没有人希望每个分支都构建和发布一个新的NuGet包,这样开源的Foo包就会出现在库中作为\'Rick\'s Foo\' vs. \'John\'s Foo\' vs. \'Alice\'s Foo\'等。\n但另一方面,我希望Github源代码库能够作为项目的一站式仓库,如果我从另一台笔记本电脑打开并注册,我应该能够构建/打包/推送,而无需从头开始重新创建整个NuGet基础设施(即只输入我的API密钥,无需其他操作)。\n这两个要求是相互矛盾的,我是否错过了一些明显的东西?

0
0 Comments

问题的原因是在使用nuget v2.8发布github托管项目时,需要将nuget的packages文件夹排除在提交之外,以避免重复提交。解决方法是修改.gitignore文件,并添加packages/,这样就可以将packages文件夹排除在提交之外。在构建新的检出源代码时,nuget包将被下载和还原。确保启用了包恢复设置,但我认为在v2.8上默认已启用。

0
0 Comments

NuGet是一个用于管理和分享代码库的开源包管理器。在某些情况下,用户可能希望将项目代码托管在GitHub上,并使用NuGet发布和共享项目。然而,在这种情况下,用户可能会遇到一些问题,包括项目目录结构的安排和如何正确配置NuGet。本文将讨论这些问题的原因和解决方法。

在GitHub上托管项目时,用户需要正确安排项目的目录结构。下面是一个典型的项目目录结构示例:

   .\Docs\ ==> 不在源代码库中
   .\Packages\ ==> 不受源代码控制
   .\Src\ ==> git仓库所在位置
   .\Src\MySolution.sln
   .\Src\.gitignore
   .\Src\MuRules.ruleset
   .\Src\build.proj ==> 用于构建的msbuild文件
   .\Src\MyProject\MyProject.csproj
   .\Src\MyProject\MyProject.nuspec
   .\Src\MyProject\nuget.config
   .\Build\ ==> 不受源代码控制
   .\Build\Debug\
   .\Build\Release\
   .\Build\Publish\

在这个例子中,项目代码位于`.\\Src\\`文件夹中,其中包括解决方案文件(`.sln`)、Git忽略文件(`.gitignore`)、构建文件(`build.proj`)以及项目文件夹(`MyProject`),其中包括项目文件(`.csproj`)、NuGet文件(`.nuspec`)和NuGet配置文件(`nuget.config`)。此外,还有一些其他文件夹,如`Docs`用于存放文档,`Packages`用于存放NuGet包,`Build`用于存放构建输出等。

为了正确配置NuGet,用户需要执行以下步骤:

1. 将`.nuspec`文件与`.csproj`文件放在一起,并提交到GitHub仓库中。

2. 添加一个`nuget.config`文件,将NuGet包文件夹移动到上一级目录。这可以通过设置``元素的值来实现,例如:


  
    
  

3. 在解决方案中启用包恢复功能,并提交NuGet包存储库的内容。这可以通过在解决方案的`.nuget`文件夹中添加`nuget.targets`文件来实现。

4. 创建一个msbuild文件(或其他构建工具),其中包含以下内容:

- 一个“build”目标,用于构建源代码并创建NuGet包。

- 一个“publish”目标,用于将NuGet包推送到NuGet.org,并将API密钥作为参数传递。

有了这个设置,就可以在Visual Studio中进行构建,但不会生成NuGet包。然而,仓库中的所有工具都可以用来生成NuGet包。

总之,通过正确安排项目目录结构和配置NuGet,用户可以在GitHub上托管项目并使用NuGet发布和共享项目。这种设置可以方便地管理和更新NuGet包,并确保项目的结构和工具的可用性。

0