Chr*_*ine 11 .net c# dll nuget
我首先通读了这个类似于我的建议问题,但没有解决方案:为什么 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
Run Code Online (Sandbox Code Playgroud)
NUnit和NUnit3TestAdapter .dll被加入的TargetProject-尽管TargetProject已经有了NUnit和NUnit3TestAdapter安装。更长的概述
我创建了自己的 NuGet 包供内部使用,称为ClientLibrary,并且我试图将它安装到另一个名为TargetProject. 这是结构的快速分解:
FullSolution.sln
MainFramework.csprojClientLibrary.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
Run Code Online (Sandbox Code Playgroud)
如果我删除这些.dll,一切正常,因为TargetProject无论如何已经安装了这些软件包。它们不是必需的,安装时必须删除它们只是很烦人。
这是我如何将ClientLibraryNuGet 包添加到TargetProject:
ClientLibrary和MainFramework项目以生成它们的 .dllClientLibrary文件夹并运行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>
Run Code Online (Sandbox Code Playgroud)
运行nuget pack -IncludeReferencedProjects- 因为ClientLibrary依赖于MainFramework(以及使用的其他几个包MainFramework)
导航到TargetProject,打开包管理器控制台
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg安装运行成功,然后.dll我抱怨的那些被添加了。
问题:
MainFramework已安装NUnit和NUnit3TestAdapterNuGet 包。ClientLibrary 才不是。因此,.dll似乎添加了 ,因为它们安装在 上MainFramework,但未安装在ClientLibrary. (请记住,ClientLibrary参考文献MainFramework.dll。)
还有其他安装在两个包MainFramework和ClientLibrary,而这些不具备.dll“是被添加至STargetProject安装时,所以我假设的问题是通过具有包目前引起MainFramework而不是在ClientLibrary。
我相信我可以通过安装NUnit和NUnit3TestAdapteron来“修复”这个问题ClientLibrary,但ClientLibrary实际上根本不使用这些包,所以这似乎是不必要的。
如何ClientLibrary在TargetProject不包含NUnit和NUnit3TestAdapter .dll的情况下安装到,并且无需安装NUnit和NUnit3TestAdapter到ClientLibrary?如果可能的话,我想告诉ClientLibrary.1.0.0.nupkg使用NUnit和NUnit3TestAdapter被包已经安装上TargetProject。
如果答案是“不可能”,那很好,但我想要一个解释——我对这个问题的总体目标是更好地了解 NuGet 和依赖项的工作方式,并理解为什么这在第一名。感谢您的阅读。
通常,最佳做法是将所有测试和相应的 NuGet 包保留在自己的项目中。然后确保没有任何项目引用测试项目。
在没有侧,客户端库将包括NUnit的dll文件,因为它们被添加到一个项目,客户端库引用。
而在do方面,客户端库将不包含 NUnit dll,因为它们都不引用测试项目。
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |