如何为解决方案中的每个项目创建单独的NuGet包,并将项目引用转换为NuGet依赖项?

5

我有一个看起来像这样的解决方案。

enter image description here

我想为ProjA、ProjB和ProjC分别生成NuGet包。我希望这个过程能检测到ProjC中上述的项目引用,并在nuspec文件中将它们转换为NuGet依赖项,而不是仅将ProjA和ProjB的dll包含在ProjC的NuGet包中。当我使用“nuget pack”命令时,该命令会使用“-IncludeReferencedProjects”选项进行设置。这个选项表示自动将文件包含或添加为依赖项,但始终会将它们包含进去,即使我希望它们被添加为依赖项。奇怪的是,在我的解决方案中,一个项目引用总是被添加为依赖项,但其他的没有被添加,我无法弄清楚其中的差异。我该如何告诉NuGet将它们作为依赖项添加?我希望这些引用是项目引用,因为这样更容易进行开发,而不必每次测试时都要生成更新本地的NuGet包。

将项目更改为“sdk样式”(例如通过创建新的.NET Core项目并将TargetFramework设置为net48)。 - Selvin
如果被引用的项目具有与项目名称相同的 .nuspec 文件,则该被引用的项目将作为依赖项添加。否则,被引用的项目将作为包的一部分添加。 - LoLance
只有当我们将ProjA.nuspecProjB.nuspec添加到相应的项目文件夹中时,nuget pack命令才能识别ProjAProjB作为NuGet包。在这种情况下,IncludeReferencedProjects将生效,将它们作为你所期望的NuGet依赖项添加...除此之外,我们还可以选择创建一个ProjC.nuspec并在其中手动定义NuGet依赖项。 - LoLance
只是想确认一下这个问题是否已经解决,如果您需要进一步的帮助,请随时告诉我。 - LoLance
1个回答

2
但是,即使我希望将它们作为依赖项添加,它们始终会被包含在内。我该如何告诉nuget将它们作为依赖项添加?
假设您正在使用nuget pack命令,而不是dotnet packmsbuild /t:pack
对于nuget pack xx.csproj -IncludeReferencedProjects命令,为了确保所引用的项目以nuget dependency格式包含在您的ProjC包中,您应该在引用项目的文件夹中添加相应的xx.nuspec文件
请参阅IncludeReferencedProjects这里的描述:如果一个引用的项目有一个与项目同名的.nuspec文件,则该引用的项目将作为依赖项添加。否则,该引用的项目将作为软件包的一部分添加因此,以下是解决方法:

1. 对我来说,我会打开 cmd.exe 并导航到 ProjA 或 ProjB 的项目文件夹,在该文件夹中使用 nuget sepc 命令为我创建 ProjectName.nuspec

2. 更改 ProjA.nuspec 的内容,使其类似于以下内容:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>ProjA</id>
    <version>1.0.0</version>
    <title>This is title.</title>
    <authors>This is author.</authors>
    <owners>These are owners.</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This is description.</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2019</copyright>
  </metadata>
</package>

现在导航到ProjC的文件夹并重新打包ProjC,IncludeReferencedProjects将按您预期的方式工作。检查方法如下:将ProjC.nupkg重命名为ProjC.zip,并检查在ProjC.zip文件中生成的ProjC.nuspec文件的内容。您会看到类似于<dependency id="ProjA" version="1.0.0" />的内容。
此外: 1.由于您正在使用nuget pack命令,而您的项目针对的是.net framework,建议您使用packages.config格式来管理三个项目的nuget包。 2.为使ProjC添加ProjA和ProjB作为nuget依赖项:除了使用IncludeReferencedProjects+ProjA.nuspec+ProjB.nuspec的方式之外,实际上我们可以简单地创建一个ProjC.nuspec文件,并添加以下内容以手动定义依赖项。
    <dependencies>
      <dependency id="ProjA" version="1.0.0" />
      <dependency id="ProjB" version="1.0.0" />
    </dependencies>
  </metadata>

似乎dotnet pack命令默认具有此行为,甚至无需创建nuspec文件! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接