Cuando agrego un archivo .dll como referencia en la aplicación C #, muestra un error:
No se pudo agregar una referencia a ".... dll". Asegúrese de que el archivo sea accesible y de que sea un ensamblado o componente COM válido.
ILDissassembler dice que no hay un encabezado CLR válido, así que trato de registrarlo usando regsvr32 y eso me da otro error:
El módulo "" se cargó pero la llamada a DLLRegisterServer falló con el código de error '0x80004005'
Estoy usando la última versión de VS2010 en una máquina con Windows 7 de 64 bits. ¿Cual podría ser el problema?
Gracias por cualquier sugerencia / respuesta
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
alguna sugerencia?Puede agregar una DLL (o EXE) a un proyecto solo si es un ensamblado .NET. Si no es así, verá este mensaje de error.
regsvr32 también hace ciertas suposiciones sobre la estructura y la función exportada en la DLL. Ha pasado un tiempo desde que lo usé, pero tiene que ver con el registro de servidores COM, por lo que ciertos puntos de entrada deben estar disponibles. Si regsvr32 falla, la DLL no proporciona esos puntos de entrada y la DLL no contiene un componente COM.
La única posibilidad de usar la DLL es importarla como cualquier otro binario que no sea .NET, por ejemplo, cuando usa ciertas API de Win32. Hay un antiguo artículo de la revista MSDN que puede resultar útil. Consulte la siguiente actualización para obtener información sobre dónde obtener el artículo.
Actualización del 12 de marzo de 2018: el enlace a MSDN Magazine ya no funciona como solía hacerlo en agosto de 2010. El artículo de Jason Clark se titula "Columna .NET: Llamar a DLL de Win32 en C # con P / Invoke". Se publicó en la edición de julio de 2010 de MSDN Magazine. La "Wayback Machine" tiene el artículo aquí en este momento (el formato es limitado). La edición completa de MSDN Magazine de julio de 2010 está disponible aquí (solo formato HCM, instrucciones sobre cómo usar archivos HCM aquí ).
fuente
Usé el andador de dependencias para verificar las referencias internas que tenía el dll. Resulta que necesitaba el tiempo de ejecución de VB msvbvm60.dll y, dado que mi caja de desarrollo no lo tiene instalado, no pude registrarlo usando regsvr32
Esa parece ser la respuesta a mi pregunta original por ahora.
fuente
Asegúrese de que su compilador esté configurado en x86 si está intentando hacer referencia a un dll x86 ...
Tenía problemas similares ... como se mencionó anteriormente, tratando de usar OLEDB para acceder a un archivo de Excel desde mi código C # en Visual Studio 2012.
Seguí recibiendo errores acerca de que la biblioteca de Access no era accesible, pero sabía que la había cargado.
Durante la depuración, me di cuenta de que estaba compilando para 64 bits pero tenía Office x86 cargado. Aunque cargué la biblioteca de Access para 32 bits, la aplicación nunca la estaba usando ... y, por lo tanto, no estaba accesible.
Esto es lo que estaba usando en C #:
"Proveedor = Microsoft.ACE.OLEDB.12.0; Fuente de datos =" + strFilePath + "; Propiedades extendidas = 'Excel 12.0 Xml; HDR = Sí'";
... estaba recibiendo un error
Tan pronto como cambié el compilador a x86, funcionó
fuente
Me acabo de encontrar con ese problema y, después de todas las explicaciones sobre cómo solucionarlo con el símbolo del sistema, descubrí que si lo agrega directamente al proyecto, puede simplemente incluir la biblioteca en cada página que sea necesaria.
fuente
Tengo el mismo problema al importar WinSCard.dll en mi proyecto. Me ocupo de eso importando directamente desde dll así:
Puede agregar esto a un proyecto separado y luego agregar una referencia de su proyecto principal.
fuente
Tuve este problema después de que mi PC se reiniciara durante la construcción de la solución. Mis dos referencias desaparecieron, así que tuve que reconstruir mis dos proyectos manualmente y luego pude agregar referencias sin errores.
fuente
No puede agregar una referencia a una DLL nativa . Sin embargo, puede incluirlos en la solución (haga clic con el botón derecho en la solución, seleccione "Agregar archivo existente"), pero no se hará referencia a ellos a menos que declare algo como
Tal vez haya algún tipo de contenedor DLL, al que en realidad hace referencia y que contiene las importaciones de DLL.
A veces, puede hacer referencia a la DLL contenedora pero aún no puede hacer que su programa se ejecute, donde el mensaje de error le sugiere que se asegure de que el archivo exista y que todas las dependencias estén disponibles.
Este problema se debe a que el ensamblado que está intentando agregar está dirigido y compilado solo para una arquitectura de procesador x86 o x64 .
Simplemente intente cambiar la plataforma de destino a x86 o x64 en Build -> Configuration Manager .
fuente
Necesitaba cambiar la arquitectura a x86 desde x64 en el administrador de configuración y copiar mi dll de 32 bits (lenguaje C - pcProxAPI.dll) en la nueva carpeta que se creó .. Esto se encuentra en la parte superior de los pasos descritos por "Sashus" a continuación .
C: \ Proyectos .. \ bin \ x86 \ Debug
fuente
Tuve el mismo problema cuando intenté agregar un dll que acababa de codificar en C ++ a mi nuevo proyecto C #. Resultó que necesitaba establecer las propiedades del proyecto C ++ de donde proviene mi dll:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Porque el proyecto de C # en el que quería usar este dll también estaba configurado así (tenía las mismas propiedades configuradas en
/clr
).fuente
Enfrenté un problema similar. Estaba tratando de agregar la referencia de un .net 2.0 dll a un proyecto .Net 1.1. Cuando intenté agregar una versión anterior de .dll que se cumplió en .Net 1.1. funcionó para mí.
fuente
Para cualquier otra persona que busque ayuda en este asunto, o experimente una FileNotFoundException o una FirstChanceException, consulte mi respuesta aquí:
Se produjo una excepción de primera oportunidad del tipo 'System.IO.FileNotFoundException' en mscorlib.ni.dll - windows phone
En general, debe estar absolutamente seguro de que cumple con todos los requisitos para hacer la referencia; sé que es la respuesta obvia, pero probablemente esté pasando por alto un requisito relativamente simple.
fuente
Tuve este error al escribir un servicio de Windows. Estaba ejecutando Visual Studio como administrador para que mis comandos posteriores a la compilación instalaran automáticamente mi servicio. Me di cuenta de que cuando cerré todo y ejecuté VS normalmente (no como administrador), me permitió agregar las referencias sin ningún error.
Espero que esta solución funcione para ti.
fuente
Normalmente, en Visual Studio 2015, debe crear el proyecto dll como un proyecto C ++ -> CLR a partir de las plantillas de Visual Studio, pero técnicamente puede habilitarlo después del hecho:
La propiedad crítica se llama
Common Language Runtime Support
set en la configuración de su proyecto. Se encuentra debajoConfiguration Properties > General > Common Language Runtime Support
.Al hacer esto, VS probablemente no actualizará la opción 'Target .NET Framework' (como debería). Puede agregar esto manualmente descargando su proyecto, editando el archivo your_project.xxproj y agregando / actualizando la
Target .NET framework Version
etiqueta XML.Para una muestra, sugiero crear una nueva solución como un proyecto CLR de C ++ y examinar el XML allí, tal vez incluso diferenciarlo para asegurarse de que no haya nada muy importante que esté fuera de lo común.
fuente
Mi respuesta es un poco tardía, pero como prueba rápida, asegúrese de que está utilizando la última versión de las bibliotecas.
En mi caso, después de actualizar una biblioteca nuget que hacía referencia a otra biblioteca que causaba el problema, el problema desapareció.
fuente
Puede agregar el archivo .dll manualmente. Por ejemplo, si desea agregar un archivo dll en su aplicación WPF y no puede referirlo en su proyecto
(Obteniendo error: No se pudo agregar una referencia a ".... dll". Asegúrese de que el archivo sea accesible y de que sea un ensamblaje válido o un componente COM),
luego COPIE ese archivo dll y PEGUE en el PROYECTO INSTALADOR (en la carpeta de la aplicación).
fuente
fuente