NuGet发布的GitHub托管项目的目录结构
NuGet发布的GitHub托管项目的目录结构
对于一个托管在Github上的开源C#项目,该项目也可以通过NuGet获取,如何组织源代码?\n具体来说:\n
- \n
- 应该将.nuspec文件放在Github仓库中吗?
- 应该将.nuspec文件放在与.csproj文件相同的文件夹中吗?
- 至于NuGet包树(/lib,/content等),由于是生成的,应该将其放在git中吗?
\n
\n
\n
\n我认为NuGet部分与Github托管是分开的,即项目源代码可用,但.nuspec文件不可用,因为在NuGet中发布不是一个开源操作。没有人希望每个分支都构建和发布一个新的NuGet包,这样开源的Foo包就会出现在库中作为\'Rick\'s Foo\' vs. \'John\'s Foo\' vs. \'Alice\'s Foo\'等。\n但另一方面,我希望Github源代码库能够作为项目的一站式仓库,如果我从另一台笔记本电脑打开并注册,我应该能够构建/打包/推送,而无需从头开始重新创建整个NuGet基础设施(即只输入我的API密钥,无需其他操作)。\n这两个要求是相互矛盾的,我是否错过了一些明显的东西?
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包,并确保项目的结构和工具的可用性。