我首先阅读了与我类似的建议问题,但没有解决方法:Why does MSTest.TestAdapter adds its DLLs into my NuGet package?
快速问题描述
我编写了一个NuGet程序包,每次安装时,都会将NUnit
和NUnit3TestAdapter
.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
和{ {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
的方式:
.dll
和TargetProject
项目以生成其.dll ClientLibrary
文件夹并运行TargetProject
ClientLibrary
文件生成:
MainFramework
运行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
,打开Package Manager控制台
ClientLibrary
安装成功运行,然后我抱怨那些MainFramework
被添加。
问题:
MainFramework
已安装TargetProject
和Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
NuGet软件包。 .dll
没有。因此,似乎添加了MainFramework
,因为它们安装在NUnit
上,但没有安装在NUnit3TestAdapter
上。 (请记住,ClientLibrary
引用了.dll
。)
MainFramework
和ClientLibrary
上都安装了 other 个软件包,而这些软件包中没有ClientLibrary
个软件包已添加到MainFramework.dll
中安装后,因此我认为问题是由于软件包存在于MainFramework
中而不是ClientLibrary
中引起的。
我相信我可以通过在.dll
上安装TargetProject
和MainFramework
来“解决”此问题,但是ClientLibrary
实际上根本没有使用那些软件包,因此似乎不必要。
如何在不包含NUnit
和NUnit3TestAdapter
ClientLibrary
的情况下,并且无需安装ClientLibrary
的情况下将ClientLibrary
安装到TargetProject
上并将NUnit
移到NUnit3TestAdapter
上?如果可能的话,我想告诉.dll
使用在NUnit
上已经已经安装的NUnit3TestAdapter
和ClientLibrary
软件包。
如果答案是“不可能”,那很好,但是我想解释一下-这个问题的总体目标是更好地了解NuGet和依赖项的工作原理,并理解为什么这是一个首先。谢谢您的阅读。