visual una tiene studio referencia que puedo puede proyecto error asegurese archivo agregar acceso .net wcf reference

.net - studio - no se puede agregar una referencia a asegurese de que tiene acceso al archivo



No se pudo agregar una referencia a la DLL (14)

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 esté accesible y de que sea un ensamblado o componente COM válido.

ILDissassembler dice que no hay un encabezado CLR válido, así que intento 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 utilizando 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 pista / respuesta


Acabo de toparme 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 se necesita


Asegúrese de que su compilador esté configurado en x86 si está tratando de hacer referencia a un dll x86 ...

Estaba teniendo 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 sobre el acceso a la biblioteca no se puede acceder, pero sabía que lo había cargado.

Durante la depuración, me di cuenta de que estoy compilando para 64 bits pero tengo Office x86 cargado. Aunque cargué la biblioteca de Access por 32 bits, la aplicación no la usaba nunca ... y, por lo tanto, no era accesible.

Esto es lo que estaba usando en C #:

"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + strFilePath + "; Propiedades extendidas = ''Excel 12.0 Xml; HDR = Yes''";

... estaba recibiendo un error

Tan pronto como cambié el compilador a x86 funcionó


Enfrenté un problema similar. Estaba intentando agregar la referencia de .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í.


Lo siguiente funcionó para mí:

Respuesta corta

Ejecute lo siguiente a través de la línea de comando (cmd):

TlbImp.exe cvextern.dll //where cvextern.dll is your dll you want to fix.

Y se creará un dll válido para usted.

Respuesta más larga

  • Cmd abierto

  • Encuentra TlbImp.exe. Probablemente ubicado en C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v7.0A / Bin. Si no puede encontrarlo vaya a su carpeta raíz (C: / o D :) y ejecute:

    dir tlbimp.exe /s //this will locate the file.

  • Ejecute tlbimp.exe y coloque su dll detrás. Ejemplo: si su dll es cvextern.dll. Tu puedes correr:

    TlbImp.exe cvextern.dll

  • Se ha creado un nuevo dll en la misma carpeta de tlbimp.exe. Puede usar eso como referencia en su proyecto.

Mi respuesta es un poco tarde, pero como prueba rápida, asegúrese de estar 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 desaparecía.


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 creada. Esto está en la parte superior de los pasos descritos por "Sashus" a below .

C: / Projects .. / bin / x86 / Debug


No puede agregar una referencia a una DLL nativa . Sin embargo, puede incluirlos en la solución (haga clic con el botón secundario en la solución, seleccione "Agregar archivo existente"), pero no serán referenciados a menos que usted declare algo así como

[DllImport("...")] public static extern void MyFunction();

Quizás haya algún tipo de DLL contenedora , a la que realmente 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 intenta agregar está dirigido y compilado solo para una arquitectura de procesador x86 o x64 .

Intente cambiar la plataforma de destino a x86 o x64 en Build -> Configuration Manager .


Normalmente, en Visual Studio 2015 debe crear el proyecto dll como un proyecto C ++ -> CLR desde las plantillas de Visual Studio, pero técnicamente puede habilitarlo después del hecho:

La propiedad crítica se denomina Common Language Runtime Support establecido en la configuración de su proyecto. Se encuentra en Configuration Properties > General > Common Language Runtime Support .

Al hacer esto, es probable que VS no actualice la opción ''Target .NET Framework'' (como debería). Puede agregarlo manualmente descargando su proyecto, editando el archivo your_project.xxproj y agregando / actualizando la etiqueta Target .NET framework Version XML.

Para una muestra, sugiero crear una nueva solución como un proyecto CLR de C ++ y examinar el XML allí, tal vez incluso difuminándolo para asegurarse de que no haya nada muy importante que sea fuera de lo común.


Para cualquier otra persona que busque ayuda en este asunto, o que experimente una excepción FileNotFoundException o una FirstChanceException, consulte mi respuesta aquí:

Se produjo una primera excepción de 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.


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 el 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 falla regsvr32, la DLL no proporciona esos puntos de entrada y la DLL no contiene un componente COM.

La única posibilidad de utilizar el archivo DLL es importarlo como cualquier otro archivo binario que no sea .NET, por ejemplo, cuando utiliza ciertas API de Win32. Hay un artículo antiguo de MSDN Magazine que podría ser útil. Consulte la siguiente actualización para obtener información sobre dónde obtener el artículo.

Actualización 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 archivos DLL Win32 en C # con P / Invocar". Fue publicado en la edición de julio de 2010 de MSDN Magazine. La "Máquina Wayback" tiene el artículo here en este momento (el formato es limitado). El número completo de MSDN Magazine, julio de 2010, está disponible here (solo formato HCM, instrucciones sobre cómo usar los archivos de HCM here ).


Tengo el mismo problema con la importación de WinSCard.dll en mi proyecto. Me ocupo de esa importación directamente desde DLL de esta manera:

[DllImport("winscard.dll")] public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext); [DllImport("winscard.dll")] public static extern int SCardReleaseContext(int phContext);

Puede agregar esto a un proyecto separado y luego agregar una referencia de su proyecto principal.


Tuve este error al escribir un servicio de Windows. Estaba ejecutando Visual Studio como administrador para que mis comandos de compilación de publicaciones instalaran automáticamente mi servicio. Me di cuenta de que cuando cerraba todo y ejecutaba VS normalmente (no como administrador), podía agregar las referencias sin errores.

Espero que esta solución funcione para ti.


Tuve este problema después de que mi PC se haya reiniciado 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 error.


Usé el walker de dependencias para verificar las referencias internas que tenía el dll. Resulta que estaba necesitando el runtime VB msvbvm60.dll y dado que mi cuadro dev no tiene eso instalado no pude registrarlo usando regsvr32

Esa parece ser la respuesta a mi pregunta original por ahora.