【问题标题】:How do I create an individual nuget package for each project in a solution, with project references converted to nuget dependencies?如何为解决方案中的每个项目创建单独的 nuget 包,并将项目引用转换为 nuget 依赖项?
【发布时间】:2019-12-03 04:41:28
【问题描述】:

我有一个类似这样的解决方案。

我想为 ProjA、ProjB 和 ProjC 生成单独的 nuget 包,并且我希望这个过程能够检测上面在 ProjC 中显示的项目引用,并将它们转换为 nuspec 文件中的 nuget 依赖项,而不仅仅是包含ProjC nuget 包中 ProjA 和 ProjB 的 dll,当我使用带有 -IncludeReferencedProjects 选项的“nuget pack”命令时会发生这种情况。

此选项说明自动包含文件或将它们添加为依赖项,但始终包含它们,即使我希望将它们添加为依赖项。奇怪的是,在我的 realword 解决方案中,项目引用之一总是作为依赖项添加,但其余的没有,我无法弄清楚其中的区别。

如何告诉 nuget 将它们添加为依赖项?

我希望引用是项目引用,因为它使开发更容易,而不是每次我想测试时都必须生成更新的本地 nuget 包。

【问题讨论】:

  • 将项目更改为“sdk 样式”(通过创建新的 .net 核心项目和 TargetFramework 到 net48 来实现)
  • 查看 IncludeReferencedProjects 的描述:If a referenced project has a corresponding .nuspec file that has the same name as the project, then that referenced project is added as a dependency. Otherwise, the referenced project is added as part of the package
  • 所以只有当我们在相应的项目文件夹中添加ProjA.nuspecProjB.nuspec时,nuget pack命令才能将ProjAProjB识别为nuget包。在这种情况下,IncludeReferencedProjects 将生效,将它们添加为您所期望的 nuget 依赖项......除此之外,我们还可以选择创建一个 ProjC.nuspec 并在那里手动定义 nuget 依赖项。
  • 刚刚签到看看这个问题是否已解决,如果您需要任何进一步的帮助,请随时告诉我。

标签: c# .net visual-studio nuget


【解决方案1】:

但始终包含它们,即使我希望将它们添加为 依赖。我如何告诉 nuget 将它们添加为依赖项?

假设您使用的是nuget pack 命令而不是dotnet packmsbuild /t:pack

对于nuget pack xx.csproj -IncludeReferencedProjects 命令,要确保引用的项目包含在您的ProjC 包中,格式为nuget dependency,您应该在引用的项目文件夹中添加相应的xx.nuspec 文件

查看IncludeReferencedProjects here 的描述:如果引用的项目有一个对应的.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 文件的内容。您会看到类似&lt;dependency id="ProjA" version="1.0.0" /&gt; 的内容。

另外

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>

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多