我想要run a local/internal NuGet repository 。我想我已经弄清楚如何“重用”现有的 NuGet 包,方法是将它们包含在使用 NuGet 的虚拟项目中并将包文件扫描到 grab my locally-cached .nupkg
files ,但是...
如何从项目创建 nuget 包 ( .nupkg
),自动包含全部 dll
依赖项而不仅仅是通过 NuGet 获取的依赖项?
具体:
- 创建解决方案
- 添加新项目
- 添加对各种
.dll
的引用文件/其他项目<--这是缺少的部分 - 通过包管理器/cmdline/其他方式添加 NuGet 包
- 某些东西会自动创建
.nupkg
根据我的发现,你应该做类似的事情
- 手动编辑您的
.csproj
文件添加<BuildPackage>true</BuildPackage>
包含依赖项 - 手动创建
.nuspec
文件并手动list your dependencies (similar ?) - 手动运行
nuget pack
在您的.nuspec
上文件
但是一切都是手动的,这很愚蠢。即使是半自动解决方案仍然很笨拙或半手动:
- Create
.nuspec
templates - 似乎不包含依赖项,仅包含元数据 nuget pack via build-event (步骤#5),您需要手动将其添加到每个项目中,它有 its own quirks :
"$(SolutionDir).nuget\NuGet.exe" pack "$(ProjectPath)" -Properties Configuration=Release move /Y *.nupkg "$(TargetDir)"
我会选择自动创建 .nuspec
的东西来自项目引用的 list 。那么理论上来说,nuget build-event 可以汇总到 build-project/nuget 包中,这才是我真正希望看到的。
最佳答案
你的观点#3(添加对各种.dll文件/其他项目的引用<--这是缺少的部分)实际上包含两个不同的问题:(1)添加对各种dll文件的引用, (2) 添加对同一解决方案中其他项目的引用。
自 NuGet 2.5 起,这里的数字 (2) 已获得一些额外的支持。为项目创建 NuGet 包时,您可以添加一个选项以包含对同一解决方案中其他项目的引用:
nuget pack projectfile.csproj -IncludeReferencedProjects
- 如果
projectfile.csproj
引用解决方案中也公开为 NuGet 包的任何其他项目,这些项目的 NuGet 包 将作为依赖项添加。 - 如果它引用您的解决方案中不将自身公开为 NuGet 包的项目,则它们的 dll 将包含在此 NuGet 包中。
对于 (1),如果您发现自己经常向项目中添加不能作为 NuGet 包提供的 dll,则可以使用这些文件创建您自己的(内部)NuGet 包。如果您随后将这些 dll 添加为 NuGet 包而不是直接添加文件,则此 NuGet 包将成为项目 NuGet 包中的依赖项。
关于visual-studio - 自动构建 NuGet 包,包括引用的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173568/