A situação:
- Eu tenho uma biblioteca de classes, chamada
RT.Servers
, contendo alguns recursos (do tipobyte[]
, mas não acho importante) - A mesma biblioteca de classes contém um método que retorna um desses recursos
- Eu tenho um programa simples (com uma referência a essa biblioteca) que chama apenas esse método único
Recebo um MissingManifestResourceException
com a seguinte mensagem:
Não foi possível encontrar nenhum recurso apropriado para a cultura especificada ou a cultura neutra. Verifique se "Servers.Resources.resources" foi corretamente incorporado ou vinculado ao assembly "RT.Servers" em tempo de compilação ou se todos os assemblies de satélite necessários são carregáveis e totalmente assinados.
Eu nunca brinquei com culturas ou com assinaturas de assembléias, então não sei o que está acontecendo aqui. Além disso, isso funciona em outro projeto que usa a mesma biblioteca. Alguma ideia?
Respostas:
Tudo o que eu precisava para corrigir esse problema foi clicar com o botão direito do mouse no
Resources.resx
arquivo no Gerenciador de Soluções e clicar em Executar Ferramenta Personalizada . Isso gera novamente oResources.Designer.cs
arquivo gerado automaticamente.Se o arquivo .resx foi adicionado ao projeto manualmente, a propriedade Custom Tool do arquivo deve ser definida como "ResXFileCodeGenerator".
O problema ocorre devido a uma incompatibilidade de namespaces, que ocorre se você alterar o "namespace padrão" da montagem nas configurações do projeto. (Eu mudei de (anteriormente)
"Servers"
para (agora)"RT.Servers"
.)No código gerado automaticamente
Resources.Designer.cs
, há o seguinte código:A cadeia literal
"Servers.Resources"
teve que ser alterada para"RT.Servers.Resources"
. Fiz isso manualmente, mas a execução da ferramenta personalizada teria feito igualmente bem.fonte
Encontrei este problema hoje e encontrei esta página de Ajuda e Suporte da Microsoft que realmente solucionou o problema.
Eu tinha alguns delegados no topo do meu arquivo, no espaço de nomes global, e de repente eu estava recebendo um
MissingManifestResourceException
ao executar o programa, nesta linha:Então mudei os delegados para o espaço de nome, obtive o mesmo erro. Finalmente, coloquei os delegados na única classe nesse arquivo e o erro desapareceu, mas eu não queria os delegados nessa classe ou espaço de nome.
Então me deparei com o link acima, que dizia
Coloquei os delegados (que eu não consideraria "definições de classe") na parte inferior desse arquivo, fora do espaço de nomes local, e o programa não conseguiu
MissingManifestResourceException
mais. Que erro irritante. Mas isso parece uma solução mais robusta do que modificar o código gerado automaticamente :)fonte
Eu deparei com um problema semelhante e, embora eu saiba que não é a causa do OP, publicarei aqui para que, se alguém resolver esse problema no futuro, uma resposta esteja disponível.
Se você adicionar uma classe antes da classe designer, receberá uma
MissingManifestResourceException
exceção em tempo de execução (sem erro ou aviso em tempo de compilação) porquePara (ligeiramente) mais informações, consulte este post .
fonte
Eu tive o mesmo problema, mas o uso do comando Executar ferramenta personalizada, conforme sugerido por Timwi , não ajudou no meu caso.
No entanto, ele me levou na direção certa, porque acabei nas propriedades do arquivo .resx . Aqui notei uma diferença em outro arquivo .resx que não causou problemas.
No meu caso, tive que alterar a propriedade "Build Action" de "Resource" para "Embedded Resource".
Meu melhor palpite pelo motivo é que eu tinha o. Resx em uma biblioteca que foi usada em outro aplicativo. Meu aplicativo não tinha seu próprio arquivo .resx , portanto, ele teve que usar o da biblioteca - que só está disponível quando incorporado na biblioteca e não "autônomo".
fonte
Quando executo um problema semelhante, no Vs 2012, verifica-se que a propriedade "Custom Tool Namespace" do arquivo resx estava incorreta (no meu caso, na verdade, não estava definida, portanto o código gerado gerou essa exceção em tempo de execução) . Meu conjunto final de propriedades para o arquivo resx era algo como isto:
fonte
Consulte também: MissingManifestResourceException ao executar testes após criar com o MSBuild (.mresource possui caminho no manifesto)
Repito a resposta aqui apenas para completar:
Parece que adicionar LogicalName ao arquivo do projeto o corrige:
ou seja, a entrada do recurso incorporado no arquivo do projeto se parece com isso:
Isso está detalhado em: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Observe que estamos usando um arquivo .resx, mas o bug ainda parece ocorrer.
Atualização: O problema com os recursos (incluindo XAML) parece estar relacionado aos caminhos de saída e ao uso de barras para frente ou para trás, conforme detalhado em: Por que a modificação dos diretórios de saída do projeto causa: IOException não foi tratado "Não é possível localizar o recurso 'app.xaml' . "
fonte
Encontrei uma causa diferente desse problema, que não estava relacionada aos arquivos resx. Eu tinha uma biblioteca de classes em que AssemblyInfo.cs continha o seguinte:
O assembly não continha nenhum código WPF, tema ou dicionários de recursos. Eu me livrei da exceção removendo o atributo ThemeInfo.
Eu não recebi uma exceção real, apenas
Vendo detalhes da exceção, o sistema estava solicitando MyAssembly.g.resources
Espero que isso possa ser útil para outra pessoa.
fonte
Não tenho certeza se isso ajudará as pessoas, mas esta funcionou para mim:
Portanto, o problema que tive foi que eu estava recebendo a seguinte mensagem:
Eu estava tentando obter os recursos incorporados no meu projeto a partir de outra biblioteca de classes.
O que fiz para corrigir o problema foi definir o Modificador de Acesso na guia Projeto-> Propriedades-> Recursos de "Interno" (acessível apenas na mesma biblioteca de classes) para "Público" (acessível em outra biblioteca de classes)
Então corra e voilà, não há mais erro para mim ...
fonte
A solução dada pelo BlaM também funcionou para mim.
Eu sou um usuário do VS 2013. Depois de passar por muitas correções, mas sem sorte, tentei o seguinte:
É isso aí! :)
fonte
Eu tive o mesmo problema, mas no meu caso, coloco uma classe em um usercontrol que está relacionada ao usercontrol como este
A solução foi mover
MyUserControlObject
o final da classe Usercontrol, assimEu espero que isso ajude
fonte
Eu estava recebendo o erro MissingManifestResourceException depois de portar meu projeto do VS2005 para o VS2010. Eu não tinha nenhuma outra classe definida no arquivo que contém minha classe Form. E eu também tive meu nome de arquivo de recurso resx definido corretamente. Não funcionou.
Então eu apaguei os arquivos resx e os regenerei. Tudo bem agora.
fonte
Recentemente, tive o mesmo problema, lutou um pouco, encontrei este tópico, mas nenhuma resposta estava correta para mim.
Meu problema foi que, quando removi a janela principal do meu projeto WPF (ele não tem uma janela principal), esqueci de removê
StartupUri
-loApp.xaml
. Eu acho que essa exceção pode acontecer se você tiver um erro noStartupUri
, então no caso, se alguém está lutando com isso - verificar o seuStartupUri
noApp.xaml
.fonte
Recentemente, deparei com essa questão, no meu caso, fiz algumas coisas:
Verifique se os espaços para nome são consistentes no arquivo Designer.cs do arquivo resx
Verifique se o espaço para nome padrão da montagem (clique com o botão direito do mouse no projeto e escolha Propriedades) está definido da mesma forma que o espaço para nome no qual o arquivo de recursos está.
Depois que eu fiz o passo 2, a exceção foi embora.
fonte
Eu tive esse problema quando adicionei outra classe no arquivo imediatamente antes da classe que derivava do formulário. Adicioná-lo após corrigir o problema.
fonte
Além disso, o mesmo erro pode ocorrer quando você insere uma nova classe no código-fonte da classe de um formulário criado pelo designer.
Essa nova classe pode ser removida e colocada em um arquivo cs diferente.
(Pelo menos no meu caso, esse era o problema ...)
fonte
Porque estou pré-compilando meu aplicativo Web (usando o recurso de publicação do VS2012). Eu estava recebendo o erro acima. Tentei todas as sugestões, mas alterar estranhamente 'Ação de compilação' para 'Conteúdo' fez o truque!
fonte
No meu caso, tenho uma API da Web com recursos e crio um pacote de nuget a partir disso. Quando uso esse nuget em outros projetos, percebo que, quando solicito uma API com recursos, estou pesquisando
MissingManifestResourceException
um pouco, aprendi que o empacotador de nuget não está empacotando recursos automaticamente. Se você quiser usar arquivos de recursos, precisará fazer isso manualmente. Portanto, você precisa adicionar as linhas abaixo ao seu arquivo .nuspec: (Visite https://github.com/NuGet/Home/issues/1482 )Mas, antes de adicionar arquivos, você precisa ter certeza de qual versão do .net está usando.
fonte
Eu tive o com um projeto F # recém-criado. A solução foi desmarcar "Usar nomes de recursos padrão" nas propriedades do projeto -> Aplicativo -> Recursos / Especifique como os recursos do aplicativo serão gerenciados. Se você não vir a caixa de seleção, atualize seu Visual Studio! Eu tenho 15.6.7 instalado. Na 15.3.2, esta caixa de seleção não existe.
fonte
Apenas para mencionar. Se você usar uma constante ou literal, verifique se ele se refere a um recurso do formulário
ProjectName.Resources
e não cpntainResources.resx
.Pode economizar uma ou duas horas.
fonte
Eu encontrei esse problema com o projeto C ++ gerenciado com base no WinForms após renomear o espaço para nome global (não manualmente, mas com a ferramenta Renomear do VS2017).
A solução é simples, mas não é mencionada em nenhum outro lugar.
Você precisa alterar a
RootNamespace
entrada no arquivo vcxproj para corresponder ao espaço para nome C ++.fonte
No meu caso, foi um erro de digitação no Xaml de uma janela aberta no Winforms Form:
Incorreta:
<Image Source="/Resources/WorkGreen.gif"/>
Correto:
<Image Source="../Resources/WorkGreen.gif"/>
pode ajudar alguémfonte
Na página de suporte da Microsoft :
Para contornar esse problema, especifique o nome do arquivo .resources ao executar o Resgen.exe. Enquanto você especifica o nome do arquivo .resources, verifique se o nome do arquivo começa com o nome do espaço para nome do seu aplicativo. Por exemplo, execute o seguinte comando no prompt de comando do Microsoft Visual Studio .NET para criar um arquivo .resources que tenha o nome do espaço para nome do seu aplicativo no início do nome do arquivo:
fonte