我从阅读与我类似的建议问题开始,但是没有解决方案:为什么MSTest.TestAdapter将其DLL添加到我的NuGet包中?
快速问题描述
我写了一个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
被加入的TargetProject
-尽管TargetProject
已经有了NUnit
和NUnit3TestAdapter
安装。
更长的概述
我创建了自己的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
:
- 生成
ClientLibrary
和MainFramework
项目以生成其.dll - 将目录更改为
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
,打开Package Manager控制台- 跑
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
安装成功运行,然后.dll
我抱怨的那些被添加。
问题:
MainFramework
拥有NUnit
和NUnit3TestAdapter
安装的NuGet包。ClientLibrary
才不是。因此,.dll
似乎已添加,因为它们已安装在上MainFramework
,但未安装在上ClientLibrary
。(请记住,ClientLibrary
参考文献MainFramework.dll
。)
还有其他安装在两个包MainFramework
和ClientLibrary
,而这些不具备.dll
“是被添加至S TargetProject
安装时,所以我假设的问题是通过具有包目前引起MainFramework
而不是在ClientLibrary
。
我相信我能“修复”这个问题通过安装NUnit
并NUnit3TestAdapter
到ClientLibrary
,但ClientLibrary
都没有真正使用这些软件包,因此它似乎没有必要。
如何安装ClientLibrary
到TargetProject
不包括NUnit
和NUnit3TestAdapter
.dll
的,并且无需安装NUnit
和NUnit3TestAdapter
到ClientLibrary
?如果可能的话,我想告诉ClientLibrary.1.0.0.nupkg
您使用上已安装的NUnit
和NUnit3TestAdapter
软件包。TargetProject
如果答案是“不可能”,那很好,但是我想解释一下-这个问题的总体目标是更好地了解NuGet和依赖项的工作方式,并理解为什么这一直是问题所在。第一名。感谢您的阅读。
ClientLibrary
仅使用的某些部分MainFramework
,因此MainFramework
当然可以拆分为MainFramework.Framework
和MainFramework.Test
,其中NUnit
依赖项仅存在于MainFramework.Test
并且ClientLibrary
仅利用MainFramework.Framework
。感谢您的分析。