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

标签 c# .net visual-studio nuget

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

enter image description here

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

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

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

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

最佳答案

But always includes them, even though I would like them added as a dependency. How do I tell nuget to add them as a dependency?

假设您使用的是 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.nupkgProjC.zip , 并检查生成的内容 ProjC.nuspec文件在 ProjC.zip文件。你会看到类似 <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>

关于c# - 如何为解决方案中的每个项目创建单独的 nuget 包,并将项目引用转换为 nuget 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150278/

相关文章:

c# - 为 Web 服务生成动态 XML 的最佳方法是什么?

visual-studio - VS 2012 IIS Express 8 - 无法启动 IIS Express Web 服务器

c# - Collection<T> 是封装 IList<T> 还是枚举 IList<T>?

c# - 显式定义接口(interface)

c# - 将 List<string[]> 展平为单个字符串,每个元素一行

c++ - 错误 LNK2001 : unresolved external symbol

c++ - 在类中的一个方法的 switch 语句中使用在类中声明的 int

c# - 在 Crystal 报表中水平重复对象?

.net - 如何在 Visual Studio Code 中运行所有测试

c# - 字段上的 PInvoke 实现