Quando adiciono um arquivo .dll como referência no aplicativo C #, ele mostra um erro:
Não foi possível adicionar uma referência a ".... dll". Verifique se o arquivo está acessível e se é um assembly ou componente COM válido.
ILDissassembler diz que não há cabeçalho CLR válido, então tento registrá-lo usando regsvr32 e isso me dá outro erro:
O módulo "" foi carregado, mas a chamada para DLLRegisterServer falhou com o código de erro '0x80004005'
Estou usando a versão final do VS2010 em uma máquina Windows 7 de 64 bits. Qual pode ser o problema?
Obrigado por quaisquer dicas / respostas
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
alguma sugestão?Você pode adicionar uma DLL (ou EXE) a um projeto somente se for um assembly .NET. Se não for, você verá esta mensagem de erro.
regsvr32 também faz certas suposições sobre a estrutura e a função exportada na DLL. Já faz um tempo desde que eu o usei, mas tem a ver com o registro de servidores COM, então certos pontos de entrada precisam estar disponíveis. Se regsvr32 falhar, a DLL não fornece esses pontos de entrada e a DLL não contém um componente COM.
A única chance de usar a DLL é importá-la como qualquer outro binário não .NET, por exemplo, quando você usa certas APIs do Win32. Há um antigo artigo da MSDN Magazine que pode ser útil. Consulte a atualização a seguir para obter informações sobre onde obter o artigo.
Atualização de 12 de março de 2018: o link para a MSDN Magazine não funciona mais como antes em agosto de 2010. O artigo de Jason Clark é intitulado "Coluna .NET: Chamando DLLs Win32 em C # com P / Invoke". Foi publicado na edição de julho de 2010 da MSDN Magazine. A "Wayback Machine" tem o artigo aqui no momento (a formatação é limitada). A edição completa da MSDN Magazine de julho de 2010 está disponível aqui (apenas formato HCM, instruções sobre como usar os arquivos HCM aqui ).
fonte
Eu usei o dependency walker para verificar as referências internas que a dll estava tendo. Acontece que ele precisava do msvbvm60.dll do tempo de execução do VB e, como minha caixa de desenvolvimento não tinha isso instalado, não consegui registrá-lo usando regsvr32
Essa parece ser a resposta à minha pergunta original por enquanto.
fonte
Certifique-se de que seu compilador está configurado para x86 se você estiver tentando fazer referência a uma dll x86 ...
Eu estava tendo problemas semelhantes ... como mencionado acima, tentando usar OLEDB para acessar um arquivo Excel do meu código C # no Visual Studio 2012.
Continuei recebendo erros sobre a biblioteca do Access não estar acessível, mas eu sabia que a tinha carregado.
Durante o Debug, percebi que estou compilando para 64 bits, mas tenho o Office x86 carregado. Embora eu tenha carregado a biblioteca do Access para 32 bits, ela nunca foi usada pelo aplicativo ... e, portanto, não estava acessível.
Aqui está o que eu estava usando em C #:
"Provedor = Microsoft.ACE.OLEDB.12.0; Fonte de dados =" + strFilePath + "; Propriedades estendidas = 'Excel 12.0 Xml; HDR = Sim'";
... eu estava recebendo um erro
Assim que mudei o compilador para x86 ele funcionou
fonte
Acabei de encontrar esse problema e depois de todas as explicações sobre como corrigi-lo com o prompt de comando, descobri que se você adicioná-lo diretamente ao projeto, você pode simplesmente incluir a biblioteca em cada página necessária
fonte
Eu tenho o mesmo problema com a importação de WinSCard.dll em meu projeto. Eu lido com isso importando diretamente da dll assim:
Você pode adicionar isso para separar o projeto e, em seguida, adicionar uma referência do seu projeto principal.
fonte
Tive esse problema depois que meu PC foi reiniciado durante a criação da solução. Minhas duas referências se foram, então tive que reconstruir meus dois projetos manualmente e então poderia adicionar referências sem erros.
fonte
Você não pode adicionar uma referência a uma DLL nativa . No entanto, você pode incluí-los na solução (clique com o botão direito na solução, selecione "Adicionar arquivo existente"), mas eles não serão referenciados a menos que você declare algo como
Talvez haja algum tipo de DLL de invólucro , que você está realmente referenciando e que contém as importações de DLL.
Às vezes, você pode fazer referência à DLL de invólucro, mas ainda não consegue fazer seu programa rodar, onde o prompt de erro sugere que você certifique-se de que o arquivo existe e todas as dependências estão disponíveis.
Esse problema ocorre porque o assembly que você está tentando adicionar é direcionado e compilado apenas para uma arquitetura de processador x86 ou x64 .
Apenas tente alterar a plataforma de destino para x86 ou x64 em Build -> Configuration Manager .
fonte
Eu precisava mudar a arquitetura para x86 de x64 no gerenciador de configuração e copiar minha dll de 32 bits (linguagem C - pcProxAPI.dll) para a nova pasta criada por esta .. Isso está no topo das etapas descritas por "Sashus" abaixo .
C: \ Projects .. \ bin \ x86 \ Debug
fonte
Tive o mesmo problema quando tentei adicionar uma dll que acabei de codificar em C ++ ao meu novo projeto C #. Acontece que eu precisava definir as propriedades do projeto C ++ de onde minha dll é:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Porque o projeto C # no qual eu queria usar essa dll também foi definido dessa forma (tinha as mesmas propriedades definidas como
/clr
).fonte
Eu enfrentei um problema semelhante. Eu estava tentando adicionar a referência de uma dll .net 2.0 a um projeto .net 1.1. Quando tentei adicionar uma versão anterior do .dll que estava em conformidade no .Net 1.1. funcionou para mim.
fonte
Para qualquer pessoa procurando ajuda sobre este assunto, ou tendo uma FileNotFoundException ou FirstChanceException, verifique minha resposta aqui:
Uma exceção de primeira chance do tipo 'System.IO.FileNotFoundException' ocorreu em mscorlib.ni.dll - Windows Phone
Em geral, você deve estar absolutamente certo de que está atendendo a todos os requisitos para fazer a referência - sei que é a resposta óbvia, mas provavelmente você está negligenciando um requisito relativamente simples.
fonte
Eu tive este erro ao escrever um serviço do Windows. Eu estava executando o Visual Studio como administrador para que meus comandos de pós-compilação instalassem automaticamente meu serviço. Percebi que quando fechei tudo e executei o VS normalmente (não como administrador), ele me permitiu adicionar as referências sem erros.
Espero que esta solução funcione para você.
fonte
Normalmente, no Visual Studio 2015, você deve criar o projeto dll como um C ++ -> projeto CLR a partir dos modelos do Visual Studio, mas você pode habilitá-lo tecnicamente após o fato:
A propriedade crítica é chamada de
Common Language Runtime Support
definida na configuração do seu projeto. É encontrado emConfiguration Properties > General > Common Language Runtime Support
.Ao fazer isso, o VS provavelmente não atualizará a opção 'Target .NET Framework' (como deveria). Você pode adicionar isso manualmente descarregando seu projeto, editando o arquivo your_project.xxproj e adicionando / atualizando a
Target .NET framework Version
tag XML.Por exemplo, sugiro criar uma nova solução como um projeto C ++ CLR e examinar o XML lá, talvez até mesmo alterá-lo para ter certeza de que não há nada muito importante que esteja fora do comum.
fonte
Minha resposta está um pouco atrasada, mas como um teste rápido, verifique se você está usando a versão mais recente das bibliotecas.
No meu caso, depois de atualizar uma biblioteca nuget que fazia referência a outra biblioteca que estava causando o problema, o problema desapareceu.
fonte
Você pode adicionar o arquivo .dll manualmente. Por exemplo, se você deseja adicionar um arquivo dll em seu aplicativo WPF e não consegue consultá-lo em seu projeto
(Erro ao obter: uma referência a ".... dll" não pôde ser adicionada. Certifique-se de que o arquivo esteja acessível e que seja um assembly ou componente COM válido),
então COPIE esse arquivo dll e COLOQUE no PROJETO INSTALADOR (na pasta do aplicativo).
fonte
fonte