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

时间:2019-12-12 20:39:52

标签: c# .net dll nuget

我首先阅读了与我类似的建议问题,但没有解决方法: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软件包,并按以下步骤重现该问题:

  1. 在client-library-repro-nuget-issue / ClientLibrary /

    中找到ClientLibrary.1.0.0.nupkg
  2. 打开用于target-project-repro-nuget-issue的程序包管理器控制台并运行

Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
  1. 请注意,NUnitNUnit3TestAdapter已加入.dll和{ {1}}已安装。

详细概述

我创建了自己的NuGet软件包供内部使用,名为TargetProject,并且尝试将其安装到名为TargetProject的另一个项目中。这是结构的快速分解:

  • NUnit
    • NUnit3TestAdapter
    • 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 NuGet软件包添加到nunit.engine.api.dll nunit.engine.dll NUnit3.TestAdapter.dll NUnit3.TestAdapter.pdb 的方式:

  1. 构建.dllTargetProject项目以生成其.dll
  2. 将目录更改为ClientLibrary文件夹并运行TargetProject

ClientLibrary文件生成:

MainFramework
  1. 运行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> 使用的其他几个软件包)

  2. 导航到nuget pack -IncludeReferencedProjects,打开Package Manager控制台

  3. 运行ClientLibrary

安装成功运行,然后我抱怨那些MainFramework被添加。

问题:

MainFramework已安装TargetProjectInstall-Package C:\Path\To\ClientLibrary.1.0.0.nupkg NuGet软件包。 .dll 没有。因此,似乎添加了MainFramework,因为它们安装在NUnit上,但没有安装在NUnit3TestAdapter上。 (请记住,ClientLibrary引用了.dll。)

MainFrameworkClientLibrary上都安装了 other 个软件包,而这些软件包中没有ClientLibrary个软件包已添加到MainFramework.dll中安装后,因此我认为问题是由于软件包存在于MainFramework中而不是ClientLibrary中引起的。

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

如何在不包含NUnitNUnit3TestAdapter ClientLibrary的情况下,并且无需安装ClientLibrary的情况下将ClientLibrary安装到TargetProject上并将NUnit移到NUnit3TestAdapter上?如果可能的话,我想告诉.dll使用在NUnit上已经已经安装的NUnit3TestAdapterClientLibrary软件包。

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

1 个答案:

答案 0 :(得分:7)

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

enter image description here

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

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

相关问题