2011-08-16 20 views
34

Estoy construyendo un proyecto con OpenCV en C#. Requiere un archivo dll llamado cvextern.dll. pero, al agregar este archivo como referencia, aparece este mensaje: -Quiero una solución para esto: asegúrese de que el archivo esté accesible y de que sea un ensamblado válido o componente COM

No se puede agregar una referencia "cvextern.dll", asegúrese de que el archivo sea accesible y de que sea un ensamblado o COM válido componente.

me canso de buscar, pasé los últimos 2 días en la búsqueda de una solución para ese problema

+1

¿Ha validado si el archivo es 'accesible' como si tuviera todos los permisos (acceso de lectura/ejecución) para un usuario específico. Además, si lo descargó de Internet, es posible que deba "desbloquearlo". – YetAnotherUser

+1

el archivo es un archivo DLL nativo, lo que significa que no puede agregarlo a un proyecto .NET mediante Agregar referencia ... puede usarlo a través de DllImport (consulte http://msdn.microsoft.com/en-us/library/system .runtime.interopservices.dllimportattribute.aspx) – Yahia

+0

Posible duplicado de [No se pudo agregar una referencia al dll] (https://stackoverflow.com/questions/3456758/a-reference-to-the-dll-could- not -be-added) – STF

Respuesta

18

el archivo es un archivo DLL nativo que significa que no puede agregarlo a un proyecto .NET mediante la opción Agregar Referencia ... puede usarlo a través de DllImport (consulte http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx)

+0

el tutorial no se parece a la realidad .. ¿Afecta la versión de Visual Studio? Estoy usando microsoft visual studio 2008 express edition .. :) –

+3

AFAIK en realidad no importa ... aunque el archivo DLL debe estar en el directorio del proyecto o "accesible a nivel mundial" (como system32 ...) – Yahia

+1

Pero ¿Cómo se pueden depurar las llamadas a esa DLL externa si no se puede agregar una referencia en el proyecto? –

3

Asegúrese de que los dlls necesarios se exporten (o se copien manualmente) a la carpeta bin al crear su aplicación.

+2

Sí, ya que no pude agregarlo como referencia, pero otra DLL lo necesitaba. Simplemente copiando en tiempo de compilación funcionó. – Binarian

8

Los siguientes trabajó para mí:

respuesta corta

ejecute el siguiente vía línea de comando (CMD):

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

Y una DLL válida será creado para usted.

más larga respuesta

  • Abrir cmd

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

    dir tlbimp.exe /s    //this will locate the file. 
    
  • Run tlbimp.exe y puso su DLL detrás de él. Ejemplo: si dll es cvextern.dll. Puede ejecutar:

    TlbImp.exe cvextern.dll 
    
  • Se ha creado una nueva dll en la carpeta de tlbimp.exe. Puedes usar eso como referencia en tu proyecto.
+0

¡Funcionó como un encanto! Asegúrese de usar cmd con derechos de administrador. – Christian

+0

no such exe win 8.1 64bit – MonsterMMORPG

+3

'tipo de entrada no es biblioteca de tipos válida' Obtuvo este error al ejecutar desde Visual Studio Command Prompt –

16

En mi caso tuve que registrar la DLL -> cmd abierto (consola) con derechos de administrador y escriba: regsvr32 "foo.dll"

+0

Esta es la respuesta que probablemente se pueda resolver al hacer esto cmd -> 'regsvr32" C: \ blah \ foo.dll "95% de este error" ' – SSpoke

1

que tenía el mismo programa, espero que esto podría ayudar.

I su uso de Windows 7, abra Símbolo del sistema-> ejecutar como administrador. registre su < ...>. dll.

Por qué ejecutar como administrador, puede registrar su < ...>. Dll utilizando la ejecución en el Inicio de Windows, pero aún así su dll solo se ejecutará como usuario, incluso si su cuenta es administrador.

Ahora puede agregar su < ...>.dll en el Proyecto-> Añadir Referencia-> Examinar

Gracias

1

Look here por la respuesta por TheMattster. Lo implementé y funcionó a las mil maravillas. En pocas palabras, su solución sugiere agregar el dll COM como un recurso para el proyecto (por lo que ahora se compila en el dll del proyecto), y en la primera ejecución escribirlo en un archivo (es decir, el archivo dll que quería allí en el primer lugar).

Mi problema era que no solo tenía que usar el COM dll en mi proyecto, también tenía que implementarlo con mi aplicación utilizando ClickOnce, y sin poder agregar referencia a él en mi proyecto la solución anterior es prácticamente el único que funcionó.

0

'It' requiere un archivo dll llamado cvextern.dll. 'Puede ser tu propio archivo cs o algún otro dll de terceros que estés usando en tu proyecto.

Para llamar a dlls nativos a su propio archivo cs, copie el dll en el directorio root \ lib de su proyecto y agréguelo como un elemento existente. (Agregue el elemento existente) y use Dllimport con la ubicación correcta.

Para un tercero, copie la biblioteca nativa a la carpeta donde reside la biblioteca de terceros y agréguela como un elemento existente.

Después de la construcción, asegúrese de que los dlls necesarios aparezcan en la carpeta Build. En algunos casos, puede no aparecer o ser reemplazado en la carpeta Build. Elimine la carpeta de compilación manualmente y vuelva a compilar.

Cuestiones relacionadas