es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El paquete Nuget referenciado en 2 ensamblados no funciona.

Tengo una solución que está construida de la siguiente manera:

ProjectA -> Assembly2 -> Assembly1 -> Paquete NuGet (Newtonsoft.JSON)

Actualmente estoy desarrollando en Assembly2, el cual tiene una dependencia de Assembly1. Depuro con ProjectA. Hasta ahora, se copia el archivo Newtonsoft.dll en mi carpeta bin y todo funciona.

Ahora quiero usar Newtonsoft directamente en mi Assembly2, así que lo añadí como un paquete NuGet. Después de hacer eso, el archivo Newtonsoft.dll ya no se copia en la carpeta bin.

Intenté descargar el archivo Newtonsoft.dll directamente (o usar el Newtonsoft.dll de Assembly1 directamente a través de ‘Examinar…’). Esto también funciona. Parece que estos problemas solo ocurren cuando uso NuGet en Assembly2. ¿Alguien puede explicar este comportamiento?

EDICIÓN:
Usé la misma versión exacta de Newtonsoft y
Estoy usando .Net Standard (2.0) para ambos mis ensamblados y .NET Framework (4.7.2) para mi proyecto (Aplicación de consola).

Las dependencias transitorias no funcionan aquí, creo. No hago referencia a otro proyecto (donde puedo ver el archivo Assy1.deps.json), sino al DLL construido.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El comportamiento que estás experimentando se debe a la forma en que funcionan los paquetes y dependencias de NuGet. Cuando agregas Newtonsoft.JSON como un paquete NuGet a Assembly2, se agrega como una dependencia directa, lo que significa que no se copia a la carpeta “bin” a menos que realmente se utilice.

    En tu caso, como solo estás utilizando Newtonsoft.JSON en Assembly2, no se copia a la carpeta “bin” de ProjectA. Esto se debe a que NuGet gestiona las dependencias de forma transitiva, lo que significa que si un paquete se referencia en un paquete que a su vez es referenciado por tu proyecto, se incluirá automáticamente.

    Cuando agregaste Newtonsoft.JSON directamente a Assembly1, este se convirtió en una dependencia directa de Assembly1 y, por lo tanto, se copió a la carpeta “bin” de ProjectA, incluso si no se utilizaba en Assembly2.

    Para solucionar este problema, podrías agregar una referencia a Newtonsoft.JSON directamente en ProjectA, o podrías agregar Newtonsoft.JSON como una dependencia directa de Assembly1 en lugar de Assembly2. De esta manera, se copiará a la carpeta “bin” de ProjectA incluso si no se utiliza en Assembly2.

    Cabe señalar que el comportamiento de las dependencias transitivas se puede personalizar utilizando el elemento PackageReference en el archivo de tu proyecto, lo que te permite controlar cómo se resuelven las dependencias y se incluyen en la salida de tu proyecto.

Comments are closed.