Pergunta

Tudo bem, depois de fazer uma tonelada de investigação e tentando quase todos os conseguiu CPP Redist posso encontrar, bem como tentando copiar meus DLLs localmente para execução do directório do aplicativo que eu não consigo descobrir que dependências que estou em falta para este mista modo de biblioteca.

Basicamente, eu tenho uma aplicação em larga C # e eu estou tentando usar uma biblioteca de modo misto que eu fiz. Na máquina de desenvolvimento funciona perfeito (é claro), mas implantado quando as necessidades da biblioteca a ser carregado para usá-lo exceções para fora por causa de dependências CRT faltando (presumo).

Eu tenho usado dependência walker para verificar todas as DLLs referenciadas e assegurou que eles existem na máquina implantação sem sorte, eu estou querendo saber se talvez é algumas dependências que precisam ser registrados que estou em falta, mas não posso descobrir o que.

Eu recebo a seguinte exceção quando tenta código para instanciar uma classe a partir da biblioteca de modo misto.

Detalhe Exceção: System.IO.FileLoadException: Não foi possível carregar arquivo ou assembly 'USADSI.MAPI, Version = 1.0.3174.25238, Culture = neutral, PublicKeyToken = null' ou uma das suas dependências. este aplicação falhou ao iniciar porque a configuração da aplicação está incorreto. reinstalar o aplicativo pode corrigir esse problema. (Exceção de HRESULT: 0x800736B1)

Estou compilando a biblioteca usando VS2008 SP1 com / clr:. OldSyntax especificado

Os olhares se manifestam intermediários como este:

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Eu posso fornecer mais informações quando necessário, infelizmente, eu não estou bem versado em fazer bibliotecas de modo misto e isso tem me jogado fora.

Se alguém pode oferecer qualquer conselho que eu agradeceria muito!

Foi útil?

Solução

Você quis implantar o CRT bibliotecas na máquina de destino? Long Shot:. desde que você tem uma dependência em código de 32 bits, você deve definir Plataforma de Destino no separador propriedade Build para x86

EDIT: trouble-shoot side-by-side resolução de problemas com o Sxstrace.exe utilidade , disponível no Vista.

Outras dicas

Normalmente eu descobri que o pragma comentário estilo manifesto de decleration ser muito mais livre de erros, de um maintenence desenvolvedor e um sobre toda a perspectiva ação de compilação. O XML de manifesto de são natoriously snafu .

O fimiluarity com a forma como o ligador opera ea compilação usual de código C e o fato de que você simplesmente tak isso no, em um dos seus arquivos de origem, mantém tudo um sentimento pouco mais "juntos";

#pragma comment(linker, \
    "\"/manifestdependency:type='Win32' "\
    "name='Microsoft.Windows.Common-Controls' "\
    "version='6.0.0.0' "\
    "processorArchitecture='*' "\
    "publicKeyToken='6595b64144ccf1df' "\
    "language='*'\"")

Eu tive um problema semelhante a primeira vez que implantou um aplicativo 2005 VS em uma máquina de destino - tinha de trazer sobre o MSVCRT80 DLL. Você está dizendo que você já tem o VS biblioteca de tempo de execução 2008,?

ETA: Além disso, pergunta idiota, mas você tem certeza de ter tanto o CRT Runtime (link acima) e o .NET Runtime, com a mesma versão que você compilado com (provavelmente 3,5)? Você provavelmente já sabe disso (especialmente considerando a sua pontuação), mas eles são 2 coisas diferentes.

Eu encontrei uma solução que parece funcionar, embora eu não gosto muito.

Eu tive que copiar as pastas:

Microsoft.VC90.CRT & Microsoft.VC90.MFC

De: Arquivos de Programas \ Microsoft Visual Studio 9.0 \ VC \ Redist \ x86

Dentro do diretório do aplicativo distribuído, eu simplesmente não consigo descobrir por que isso parece trabalho e os redistributables não fez nada.

EDIT: Olhando o manifesto eu provavelmente não precisa copiar o diretório MFC

A melhor maneira de resolver este problema é para monitor de processo de download que é livre de: http://technet.microsoft.com/en-us/sysinternals/bb896645. aspx

Adicionar um filtro para assistir apenas o seu processo e ele vai mostrar todos o acesso ao arquivo as tentativas de processo. Isto irá mostrar-lhe exatamente o que dll não pode encontrar.

Eu sempre uso isso quando confrontados com o mesmo problema -. Se apenas microsoft preenchido no nome do arquivo na exceção lançada tudo seria mais fácil

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top