我从阅读与我类似的建议问题开始,但是没有解决方案:为什么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.slnMainFramework.csprojClientLibrary.csproj->.nupkg由此产生
单独的项目:
TargetProject.slnTargetProject.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无论如何已经安装了这些软件包。它们不是必需的,在安装时必须删除它们只是很烦人。
这是我将ClientLibraryNuGet包添加到的方式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。感谢您的分析。
