2008-12-17 11 views
18

Tengo una lib de CommonUtils que he integrado en un dll de la que archivo referencia desde varios de mis proyectos. CommonUtils depende de log4net.dll que se estableció como referencia de archivo y copy-local = true cuando se creó CommonUtils.dll. log4net.dll y CommonUtils.dll no están en GAC.Dependencias de las referencias no copiadas en el directorio de salida

todo funciona bien en MyWorkingProject donde sólo tengo una referencia de archivo a CommonUtils.dll - log4net.dll aparece en el directorio de salida (ya que es una dependencia de CommonUtils.dll pero no hace referencia desde MyWorkingProject). Sin embargo, si creo un nuevo proyecto para agregar algunos unittest: MyWorkingProjectTest y proyecto de referencia MyWorkingProject y luego archivo de referencia CommonUtils.dll aquí (quiero usar algunos de los CommonUtils) luego de la construcción de log4net.dll que es una dependencia tanto en el La referencia del proyecto y en la referencia del archivo tampoco se copia en el directorio de salida.

¿Alguien puede aclarar lo que está sucediendo aquí? ¿El compilador no sabe cuál de los archivos log4net.dll debe capturar? ¿Hay algo que estoy haciendo mal aquí? ¿Debo hacer esto de otra manera para que log4net.dll se copie explícitamente? ¿Tiene algún sentido que tenga que hacer referencia explícita a lo que hace log4net?

Respuesta

1

Creo que si no agrega log4net como referencia en su proyecto, no se copiará.

+0

¿Cómo agregaría log4net como referencia de proyecto ya que solo tengo el dll binario distribuido? Además, ¿por qué debería agregar una referencia ya que es simplemente una dependencia de una de mis referencias? Alguien dijo que no debe hacer referencia a las bibliotecas que no está utilizando explícitamente en su código. – Fadeproof

+0

No quise decir como "Referencia del proyecto" en lugar de "Referencia" en su proyecto. – user7116

0

Cuando he tenido una situación similar en el pasado, recibí una advertencia de compilador en Visual Studio que me indicaba que necesitaba agregar una referencia a la biblioteca dependiente.

¿Está recibiendo una advertencia al compilar? Si es así, siga los consejos que da y encontrará Log4net copiado en su directorio de salida.

+0

El problema es que tengo dos referencias que tienen dependencias en log4net y parece que hay algo incorporado en el estudio visual para no copiar la dependencia conflictiva (a pesar de ser la misma). Todo funciona como se espera si solo hago referencia a 1, pero no se copia si hago referencia a ambos. ? – Fadeproof

+0

¿Son ambas referencias verdaderamente para el mismo conjunto? Verifique las propiedades de cada referencia para asegurarse de que la ruta sea idéntica. – Bevan

2

Esto es por diseño. Debe pensar en las implicaciones que causaría la herencia automática de las referencias. Si bien lógicamente puede ver cuáles deberían ser las referencias, no existe tal delineación para el compilador. En teoría, podría terminar reproduciendo el Framework y una buena parte de su sistema operativo si recorriera todo el árbol de dependencias.

Definitivamente es un dolor, y estoy de acuerdo con y entiendo su frustración, pero supongo que Microsoft no fue capaz de encontrar una manera lógica de hacerlo.

+0

¿Puede aconsejarme sobre cómo debo hacer esto entonces? Si tengo LibA y LibB, ambos dependen de log4net y se encuentran en MyProjDir/LibA y MyProjDir/LibB que contienen log4net.dll. ¿Qué log4net.dll debería hacer referencia? ¿Es true-local para log4net.dll no es el camino a seguir cuando se crean libA y libB? – Fadeproof

+0

Personalmente, añado cualquier referencia compartida al proyecto de nivel superior. Por ejemplo, si sus dos bibliotecas serán utilizadas por y la aplicación, agregaría log4net.dll directamente a la carpeta/bin de la aplicación. No es la mejor solución, pero creo que es más fácil que buscar la referencia. –

+0

"por y aplicación" = "por una aplicación". Además, decir que agrego las referencias al nivel superior es engañoso.No agrego una referencia: simplemente agrego a la carpeta/bin ya que estará en la ruta de exploración para las bibliotecas que la buscan. –

Cuestiones relacionadas