39

我有一个正在处理的解决方案,其中包含 4 个类库项目(A、、、、B)。并且可以被认为是解决方案中的顶级项目。和参考,并且独立。CDABABCD

这四个项目代表了我制作的一组处理自动化工作流的服务。它们都是密切相关的,并且只会在一个位置(服务管理器)中使用,所以我不想将它们分成不同的解决方案。

我的问题是我想创建一个包含所有 4 个库的单个 NuGet 包,而不必全部构建它们并手动收集它们的 DLL。我知道我可以通过拥有AB参考其余项目在技术上实现这一点,但这不是真正的关系,我认为应该避免这种关系。

我已经对这个问题进行了很多搜索,除了手动收集 DLL 并自己构建包之外,我找不到其他解决方案。有没有办法使用 NuGet 的特性/能力来实现我想要的结果?

注意:如果标签不明确,我目前正在将 VS2010 与 TeamCity 构建服务器一起使用。如果它是相关的,我还通过 Stash 服务器使用 Git。

编辑:我刚刚意识到这可能很重要。这些项目确实引用了我需要标记为依赖项的其他 NuGet 包。

4

5 回答 5

24

您必须定义自己的 nuspec 清单。您可以在以下部分列出包含程序集files

<file src="A\bin\Release\A.dll" target="lib\net40" />
<file src="B\bin\Release\B.dll" target="lib\net40" />
...

有关更多详细信息,请阅读NuSpec 参考

然后在 NuPack 构建步骤而不是 proj 中引用该 nuspec 文件。

于 2013-04-09T07:57:53.340 回答
23

如果你已经下载了 NuGet.exe 你可以运行:nuget pack Myproject.csproj -IncludeReferencedProjects这应该包括你所有的项目。这是来自 NuGet文档的注释:

如果项目引用了其他项目,您可以将引用的项目添加为包的一部分,或者使用 -IncludeReferencedProjects 选项添加为依赖项。这是递归完成的。例如,假设您有项目 A.csproj,它引用 B.csproj 和 C.csproj,而 B.csproj 引用 D.csproj 和 E.csproj,C.csproj 引用 F.csproj 和 G.csproj。然后,当您运行时:

nuget pack A.csproj -IncludeReferencedProjects

生成的包将包含来自项目 B、C、D、E、F 和 G 的文件,以及来自项目 A 的文件。

如果引用的项目具有相应的同名 nuspec 文件,则将该引用的项目添加为依赖项。使用相同的示例,假设现在在与项目文件 C.csproj 相同的目录中有文件 C.nuspec。当你运行时:

nuget pack A.csproj -IncludeReferencedProjects

生成的包将包含来自项目 B、D、E 的文件以及来自项目 A 的文件,并且该包依赖于 C。

另请参阅命令行参考

于 2013-08-25T15:33:20.043 回答
9

2020 更新

我个人更喜欢尽可能使用dotnet命令。

我发现工作正常的解决方案是更改主项目中的默认项目引用,<ProjectReference></ProjectReference>如下所示

  <ItemGroup>
    <ProjectReference Include="..\{ProjectFolder}\{ProjectName}.csproj">
      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
      <IncludeAssets>{ProjectName}.dll</IncludeAssets>
    </ProjectReference>
  </ItemGroup> 

确认此解决方案在定位netstandard2.0及以上时有效。

于 2020-06-17T18:39:33.740 回答
1

这可能会解决这个问题:nuget.exe pack proj.csproj -IncludeReferencedProjects

您可以看到: 为具有多个项目的解决方案创建 nuget 包

于 2016-11-07T10:37:18.580 回答
0

如果您在 VS 中有多个项目,并且您的 Pack 文件依赖于另一个项目,则两者都需要打包。先打包依赖,再打包你的项目。使用 NuGet 包管理器添加包时,请确保您的源不是 nuget.org,而是您的测试文件夹。除非您已将两者都上传到 Nuget.org。 如何在本地安装 NuGet 包 .nupkg 文件?

于 2021-04-14T19:10:34.537 回答