我想run a local/internal NuGet repository。我想我已经知道如何"重用"现有的NuGet包,方法是将它们包含在一个使用NuGet的虚拟项目中,并将包文件扫描到grab my locally-cached .nupkg
files,但是...
如何从一个项目中创建一个nuget包(.nupkg
),自动包含所有dll
依赖项,而不仅仅是通过NuGet获取的依赖项?
具体而言:
1.创建解决方案
1.添加新项目
1.添加对各种.dll
文件/其他项目的引用 〈--这是缺少的部分 *
1.通过包管理器/cmdline/whatever添加NuGet包
1. something * 会自动创建.nupkg
据我所知,你应该做的事情
- 手动编辑您的
.csproj
文件以添加<BuildPackage>true</BuildPackage>
以包括相关性 - 手动创建一个
.nuspec
文件并手动列出你的依赖项(similar ?) - 在
.nuspec
文件上手动运行nuget pack
但是所有的东西都是手动的,这很愚蠢,即使是半自动的解决方案也很笨拙,或者说是半手动的:
- 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
清单的东西,然后理论上+nuget构建事件可以被卷到一个构建项目/nuget包中,这是我真正想看到的。
6条答案
按热度按时间twh00eeo1#
您的第3点(* 添加对各种.dll文件/其他项目的引用〈--这是缺少的部分 *)实际上包含两个不同的问题:(1)添加对各种dll文件的引用,(2)添加对同一解决方案中其他项目的引用。
从NuGet 2.5开始,这里的编号(2)获得了一些额外的支持。您可以添加一个选项,以便在为项目创建NuGet包时包含对同一解决方案中其他项目的引用:
projectfile.csproj
引用了解决方案中也作为NuGet包公开的任何其他项目,则这些项目的NuGet包将作为依赖项添加。至于(1),如果你发现自己经常添加一些不能作为NuGet包使用的dll文件到你的项目中,你可以用这些文件创建你自己的(内部的)NuGet包。如果你将这些dll文件作为NuGet包而不是直接添加这些文件,那么这个NuGet包将成为你项目的NuGet包的依赖项。
mbskvtky2#
我发现了一篇关于这个主题的文章,我也有同样的问题,有些软件包有依赖关系的层次结构,到目前为止我一直把每个包作为一个单独的NuGet包上传(浪费时间)
我刚刚测试了这里找到的解决方案:https://dev.to/wabbbit/include-both-nuget-package-references-and-project-reference-dll-using-dotnet-pack-2d8p
在使用NuGet Package Explorer检查NuGet包之后,由引用的项目生成的DLL确实存在。我将通过实际提交这个包到NuGet并测试它来进行测试。
下面是我的来源,如果它是有帮助的你:https://github.com/jchristn/NuGetPackTest
测试NuGet包:https://www.nuget.org/packages/NuGetPackTest/1.0.0
这个解决方案看起来很好用,我不知道当有多层引用的时候会是什么样子,我确信它会变得非常复杂,而且非常快。
NuGetPackTest库中的.csproj引用了项目TestLibrary(为简洁起见,删除了部分内容)
ssgvzors3#
对于其他Google用户,如果您正在使用NuGet.targets文件运行NuGet Pack,则可以使用此命令:
8yparm6h4#
看看这个!
我发现的解决方案是Visual Studio的扩展:https://visualstudiogallery.msdn.microsoft.com/fbe9b9b8-34ae-47b5-a751-cb71a16f7e96/view/Reviews
您只需添加名为NuGet Package的新项目:
然后你将有趣的项目添加到引用中,所有的依赖项和文件目录都会自动添加。如果你想修改NuSpec数据,你可以在项目上点击右键,进入属性,然后修改你想要的。生成的NuSpec和nupkg将在你的新项目的obj文件夹中。我希望它能帮助你;).
6vl6ewon5#
我通过将整个TargetDir添加到nuget包来解决这个问题。只需将以下内容添加到.csproj:
sauutmhj6#
最初的NuGet包会包含本地项目dll,如果你使用packages. config,任何nuget包都会被列为依赖项。
微软已经简化了所有的东西,所以现在. net(core)所有的东西都是从项目文件中完成的,这是我更喜欢的。但是现在使用nuget pack,你得到的包将没有依赖项列出。
微软表示,NuGet不支持PackageReferences
NuGet CLI
因此,您需要使用dotnet pack或msbuild-t:pack
dotnet CLI
然而,现在使用dotnet包,您的PackageReferences具有依赖项,但您的ProjectReferences现在也列为依赖项.....
下面是一个示例项目文件,其中包含PackageReferences和ProjectReferences。对于项目,它们已标记为PrivateAssets ="All",然后使用自定义生成目标将所需文件从项目复制到包中。
NuGet pack task doesn't include dependencies when using PackageReference #10301nuget pack is ignoring dependencies when using PackageReference instead of packages.config #5979
伟大的指南和例子约瑟夫Ottosson Include Referenced Projects - Josef Ottosson