Comencé leyendo esta pregunta sugerida similar a la mía, pero no hubo solución: ¿Por qué MSTest.TestAdapter agrega sus DLL en mi paquete NuGet?
Descripción rápida del problema
Escribí un paquete NuGet, y cada vez que lo instalo, NUnity NUnit3TestAdapter .dllme agregan al proyecto en el que instalé. Quiero encontrar una solución que solucione este problema.
Repro pasos
He introducido dos repositorios git que reproducen el problema que estoy describiendo.
ClientLibrary/ MainFramework(proyecto del que generé el paquete NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(proyecto en el que se instalará el paquete) - https://github.com/harbourc/target-project-repro-nuget-issue
Puede clonar ambos repositorios, restaurar sus paquetes NuGet y reproducir el problema de la siguiente manera:
Localice ClientLibrary.1.0.0.nupkg en client-library-repro-nuget-issue / ClientLibrary /
Abra la consola del administrador de paquetes para target-project-repro-nuget-issue y ejecute
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Tenga en cuenta los
NUnityNUnit3TestAdapter.dll's que se agreganTargetProject, a pesar de queTargetProjectya tieneNUniteNUnit3TestAdapterinstalado.
Descripción general más larga
He creado mi propio paquete NuGet para uso interno, llamado ClientLibrary, y estoy intentando instalarlo en otro proyecto, llamado TargetProject. Aquí hay un desglose rápido de la estructura:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkggenerado a partir de esto
Proyecto separado:
TargetProject.slnTargetProject.csproj-> instalar.nupkgen esto
ClientLibrarytiene una referencia MainFrameworky utiliza muchos métodos de MainFramework.
Al instalar ClientLibrary.1.0.0.nupkgen TargetProject, .dllse agregan los siguientes a TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Si elimino estos .dll, todo funciona bien, porque de TargetProjecttodos modos ya tiene esos paquetes instalados. No son necesarios, es molesto tener que eliminarlos durante la instalación.
Así es como estoy agregando el ClientLibrarypaquete NuGet a TargetProject:
- Construye
ClientLibraryyMainFrameworkproyecta para generar sus .dlls - Cambie el directorio a la
ClientLibrarycarpeta y ejecutenuget spec
.nuspec se genera el archivo:
<?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>
Ejecutar
nuget pack -IncludeReferencedProjects: porqueClientLibrarytiene una dependenciaMainFramework(y varios otros paquetes utilizados porMainFramework)Vaya a
TargetProject, abra la consola del Administrador de paquetes- correr
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
La instalación se ejecuta con éxito, y de eso .dllme estoy quejando.
Problema:
MainFrameworktiene NUnity NUnit3TestAdapterpaquetes NuGet instalados. ClientLibrary no. Por lo tanto, .dllparece que se agregaron porque están instalados MainFramework, pero NO instalados ClientLibrary. (Recuerde, ClientLibraryreferencias MainFramework.dll).
Hay otros paquetes instalados en ambos MainFrameworky ClientLibrary, y estos no tienen .dlllos que se agregan TargetProjectdespués de la instalación, por lo que supongo que el problema es causado por tener paquetes presentes MainFrameworkpero NO en ClientLibrary.
Creo que puedo "solucionar" este problema instalando NUnity NUnit3TestAdapteren ClientLibrary, pero en ClientLibraryrealidad no usa esos paquetes, por lo que parece innecesario.
¿Cómo puedo instalar ClientLibraryen TargetProjectsin incluir los NUnity NUnit3TestAdapter .dll's, y sin tener que instalar NUnity NUnit3TestAdapteren ClientLibrary? Si es posible, me gustaría decirle ClientLibrary.1.0.0.nupkgque use los paquetes NUnity NUnit3TestAdapterque ya están instalados TargetProject.
Si la respuesta es "No es posible", está bien, pero me gustaría una explicación: mi objetivo general para esta pregunta es obtener una mejor comprensión de cómo funcionan NuGet y las dependencias, y entender por qué esto ha sido un problema en el primer lugar. Gracias por leer.

ClientLibrarysolo usa algunas partes deMainFramework, porMainFrameworklo que ciertamente se puede dividir enMainFramework.FrameworkyMainFramework.Test, donde lasNUnitdependencias solo existenMainFramework.TestyClientLibrarysolo se utilizanMainFramework.Framework. Gracias por el análisis.Respuestas:
En general, es una buena práctica mantener todas sus pruebas y los paquetes NuGet correspondientes en su propio proyecto. Luego, asegúrese de que ninguno de los proyectos haga referencia al proyecto de prueba.
Por lo hagas lado, biblioteca de clientes incluirá los archivos DLL NUnit, ya que se han añadido a un proyecto que las referencias de biblioteca de cliente.
Mientras que en el lado do , Client Library no incluirá los dlls NUnit porque ninguno hace referencia al proyecto de prueba.
fuente