我想运行本地/内部NuGet存储库.我想我已经想出了如何"重用"现有的NuGet包,方法是将它们包含在使用NuGet的虚拟项目中,并扫描包文件以获取我的本地缓存.nupkg文件,但......
.nupkg从项目中创建nuget package(),自动包含所有 dll依赖项,而不仅仅是通过NuGet获取的依赖项?特别:
.dll文件/其他项目的引用< - 这是缺少的部分.nupkg从我发现的,你应该做的事情
.csproj要添加的文件<BuildPackage>true</BuildPackage>以包含依赖项.nuspec文件并手动列出你的依赖项(类似吗?)nuget pack您的.nuspec文件但一切都是手工的,这是愚蠢的.即使是半自动解决方案仍然是笨拙或半手动:
.nuspec模板 - 似乎不包含依赖项,只包含元数据nuget pack via build-event(步骤#5),你需要手动添加到每个项目,它有自己的怪癖:
"$(SolutionDir).nuget\NuGet.exe" pack "$(ProjectPath)" -Properties Configuration=Release
move /Y *.nupkg "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)我会满足于.nuspec从项目引用中自动创建清单的东西.然后理论上+ nuget构建事件可以汇总到构建项目/ nuget包中,这是我真正想要看到的.
我在下面的简单场景中重现了这个问题
现在我想创建一个nuget包LibA并运行:
nuget pack LibA.csproj
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当我检查nuget包时,我找不到LibB.dll我期望的lib文件夹中的一个.为什么不?
我正在使用Nuget 2.2版.
背景: 我有两个名为"A"和"B"的组件.""A"引用"B"."A"还引用了一些我认为应该打包在nupkg中的附加dll(Microsoft.Enterprise Library.Data和Microsoft Enterprise Library.Common).
我相信我的nupkg软件包应包含"A","B"和两个"Microsoft Enterprise"程序集的程序集输出,这样当有人安装我的软件包时,它会直接引用程序集"A"和其他三个程序集将可用(但不能直接引用,以便它们的应用程序可以运行.打包非引用dll的正确方法是什么?
尝试#1:将所有必需的dll打包在\net35文件夹中 根据关于"references"元素的NuGet文档 "如果省略此元素,则通常的行为适用,即引用lib文件夹中的每个程序集."
因此,我假设通过使用此元素,它将仅包含指定为引用的程序集.如果我也使用"file"元素,情况似乎并非如此<file src=*.dll" target="lib\net35" />.如果我有一个这样的元素将所有dll复制到包中,它会导致实现此包的程序集引用\net35目录中的所有程序集.这不是我想要做的.我期待一些魔法,只有"引用"中指定的程序集才会被实际引用,而其他所有程序集将保留在爆炸的\ packages文件夹中,并且应用程序将起作用,因为所有dll都位于同一目录中.也许我不对......
尝试#2作为内容添加到项目中 如果我在打包时将未引用的程序集放入\ content\lib而不是lib \net35,则会在项目中创建一个\ lib文件夹,并直接将\ content\lib dll转储到该项目中,然后强制执行我们将它们检查为源代码控制.这可以工作,编译和运行,但我真的不希望这些存储在项目的\ lib文件夹中.
我正在寻找一个解决方案,其中项目获取对"A"的引用,并且仍然可以与其他所需的程序集共同运行,但不能直接引用.似乎尝试#1是正确的路径,但也许有一个错误?
仅供参考,我直接将此作为NuGet的一个问题进入,以确定该团队也有答案.