我首先通读了与我类似的建议问题,但没有解决方案:Why does MSTest.TestAdapter adds its DLLs into my NuGet package?

快速问题描述

我编写了一个NuGet程序包,每次安装时,NUnitNUnit3TestAdapter .dll都会添加到我安装的项目中。我想找到一个解决此问题的解决方案。

复制步骤

我推了两个git存储库,它们再现了我正在描述的问题。
ClientLibrary/MainFramework(我从中生成NuGet包的项目)-https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(要安装该软件包的项目)-https://github.com/harbourc/target-project-repro-nuget-issue

您可以克隆两个存储库,还原它们的NuGet包,并按以下步骤重现该问题:

  • 在client-library-repro-nuget-issue/ClientLibrary/
  • 中找到ClientLibrary.1.0.0.nupkg
  • 打开用于target-project-repro-nuget-issue的程序包管理器控制台,并运行
  • Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
    
  • 请注意已添加到NUnit中的NUnit3TestAdapter.dll TargetProject,即使TargetProject已经安装了NUnitNUnit3TestAdapter

  • 更长的概述

    我创建了自己的NuGet软件包供内部使用,称为ClientLibrary,并且尝试将其安装到另一个项目中,称为TargetProject。这是结构的快速分解:
  • FullSolution.sln
  • MainFramework.csproj
  • ClientLibrary.csproj->从此
  • 生成的.nupkg
    单独的项目:
  • TargetProject.sln
  • TargetProject.csproj->在此
  • 上安装.nupkg ClientLibrary引用了MainFramework,并使用了MainFramework中的许多方法。

    ClientLibrary.1.0.0.nupkg上安装TargetProject时,以下.dll会添加到TargetProject中:
    nunit.engine.api.dll
    nunit.engine.dll
    NUnit3.TestAdapter.dll
    NUnit3.TestAdapter.pdb
    

    如果删除这些.dll,则一切正常,因为TargetProject已经安装了那些软件包。它们不是必需的,在安装时必须删除它们只是很烦人。

    这是我将ClientLibrary NuGet包添加到TargetProject的方法:
  • 构建ClientLibraryMainFramework项目以生成其.dlls
  • 将目录更改为ClientLibrary文件夹并运行nuget spec

  • 生成.nuspec文件:
    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>ClientLibrary</id>
        <version>1.0</version>
        <title>Client Library</title>
        <authors>Myself</authors>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Client library for interacting with my application.</description>
        <dependencies>
          <group targetFramework=".NETFramework4.7.2" />
        </dependencies>
      </metadata>
    </package>
    
  • 运行nuget pack -IncludeReferencedProjects-因为ClientLibrary依赖于MainFramework(以及MainFramework使用的其他几个软件包)
  • 导航到TargetProject,打开程序包管理器控制台
  • 运行Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg

  • 安装成功运行,然后添加了我提示的.dll

    问题:
    MainFramework已安装NUnitNUnit3TestAdapter NuGet软件包。 ClientLibrary 没有。 因此,似乎添加了.dll,因为它们已安装在MainFramework上,但未安装在ClientLibrary上。 (请记住,ClientLibrary引用了MainFramework.dll。)

    MainFrameworkClientLibrary上都安装了其他软件包,并且这些软件包没有在安装时添加到.dllTargetProject,因此我假设问题是由于MainFramework中存在软件包而不是ClientLibrary中引起。

    我相信我可以通过在NUnit上安装NUnit3TestAdapterClientLibrary来“解决”此问题,但是ClientLibrary实际上根本没有使用那些软件包,因此似乎没有必要。

    如何在不包括ClientLibraryTargetProjectNUnit的情况下,又不必在NUnit3TestAdapter上安装.dllNUnit的情况下,将NUnit3TestAdapter安装到ClientLibrary上?如果可能的话,我想告诉ClientLibrary.1.0.0.nupkg使用已经在NUnit上安装了的NUnit3TestAdapterTargetProject软件包。

    如果答案是“不可能”,那很好,但是我想解释一下-这个问题的总体目标是更好地了解NuGet和依赖项的工作方式,并理解为什么这一直是问题所在。第一名。感谢您的阅读。

    最佳答案

    通常,最佳做法是将所有测试和相应的NuGet包保留在自己的项目中。然后,确保没有任何项目引用测试项目。

    c# - 安装NuGet软件包时,可以解决这些.dll问题吗?-LMLPHP

    而非方面,客户端库将包含NUnit dll,因为它们已添加到客户端库引用的项目中。

    而在方面,客户端库将不包含NUnit dll,因为两者均未引用测试项目。

    09-15 20:45