对于github托管的开源C#项目,也可以通过NuGet获得,如何组织源代码?具体做法是:
我的想法是NuGet部分与github托管是分开的,因为在项目源中可用,但.nuspec不是,因为NuGet中的发布不是开源操作本身。没有人希望每个分支构建和发布一个新的 NuGet包,这样开源Foo包最终会在库中以'Rick's Foo'与'John's Foo'对比'Alice's Foo'等。
但另一方面,我确实希望github源代码库充当项目的一站式存储库,如果我打开我的其他笔记本电脑并从那里登记,我应该能够构建/打包/推送w / o从头开始重新创建整个NuGet基础架构(即只输入我的API密钥,仅此而已)。
这两个要求相互矛盾,我是否错过了一些明显的东西?
答案 0 :(得分:7)
我会做以下事情:
.nuspec
文件旁边的.csproj
文件nuget.config
个moves the packages folder级别的文件。我个人在.nuspec
文件中维护nuget包的版本号,并在我执行“发布”时手动更新它。这样我就可以标记我推送到NuGet feed的确切版本。
使用此设置,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中已得到修复
答案 1 :(得分:0)
在nuget v2.8上,我只需要修改.gitignore
并添加:
packages/
这将从提交中排除nuget packages
文件夹。构建新的签出源代码时,将下载并还原包。确保已启用包恢复设置,但我认为它已在v2.8上默认启用。