그 상황:
- 라는 클래스 라이브러리가
RT.Servers
있습니다 (유형의 리소스가 몇 개 포함되어byte[]
있지만 중요하지 않다고 생각합니다) - 동일한 클래스 라이브러리에는 해당 자원 중 하나를 리턴하는 메소드가 포함되어 있습니다.
- 해당 단일 메소드 만 호출하는 간단한 프로그램 (해당 라이브러리 참조)이 있습니다.
내가 얻을 MissingManifestResourceException
다음과 같은 메시지가 :
지정된 문화 또는 중립 문화에 적합한 자원을 찾을 수 없습니다. 컴파일 할 때 “Servers.Resources.resources”가 어셈블리 “RT.Servers”에 올바르게 임베드되거나 링크되었는지 또는 필요한 모든 위성 어셈블리가로드 가능하고 완전히 서명되었는지 확인하십시오.
나는 문화 나 어셈블리 서명을 가지고 놀지 않았으므로 여기서 무슨 일이 일어나고 있는지 모르겠습니다. 또한 이것은 동일한 라이브러리를 사용하는 다른 프로젝트에서 작동합니다. 어떤 아이디어?
답변
이 문제를 해결하기 위해 Resources.resx
솔루션 탐색기에서 파일 을 마우스 오른쪽 단추로 클릭하고 사용자 지정 도구 실행을 클릭하기 만하면 됩니다. 이것은 자동 생성 된 재생성Resources.Designer.cs
파일 됩니다.
.resx 파일을 프로젝트에 수동으로 추가 한 경우 파일의 사용자 정의 도구 특성을 “ResXFileCodeGenerator”로 설정해야합니다.
프로젝트 설정에서 어셈블리의 “기본 네임 스페이스”를 변경하면 네임 스페이스가 일치하지 않기 때문에 문제가 발생합니다. ((이전) "Servers"
에서 (현재)로 변경했습니다."RT.Servers"
.)
의 자동 생성 코드 Resources.Designer.cs
에는 다음 코드가 있습니다.
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Servers.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
리터럴 문자열 "Servers.Resources"
을로 변경해야했습니다 "RT.Servers.Resources"
. 이 작업을 수동으로 수행했지만 사용자 지정 도구를 실행하면 동일하게 수행됩니다.
답변
방금 오늘이 문제가 발생 했으며 실제로이 문제를 해결하는 이 Microsoft 도움말 및 지원 페이지 를 찾았습니다 .
내 파일 맨 위에 전역 네임 스페이스에 몇 명의 대의원이 있었으며 MissingManifestResourceException
프로그램을 실행할 때 갑자기이 줄에 도착했습니다 .
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
그런 다음 대리자를 네임 스페이스로 옮겼는데 같은 오류가 발생했습니다. 마지막으로 델리게이트를 해당 파일의 유일한 클래스에 넣었고 오류가 사라졌지 만 해당 클래스 또는 네임 스페이스의 델리게이트를 원하지 않았습니다.
그런 다음 위의 링크를 보았습니다.
이 문제를 해결하려면 다른 모든 클래스 정의를 폼의 클래스 정의 뒤에 나타나도록 이동하십시오.
로컬 네임 스페이스 외부에서 해당 파일의 맨 아래에 “클래스 정의”를 고려하지 않는 델리게이트를 추가했는데 프로그램이 MissingManifestResourceException
더 이상 얻지 못했습니다 . 짜증나는 오류입니다. 그러나 자동 생성 코드를 수정하는 것보다 더 강력한 솔루션처럼 보입니다. 🙂
답변
비슷한 문제가 발생했지만 OP가 원인이 아니라는 것을 알고 있지만 나중에 다른 사람 이이 문제를 겪을 경우 답변을 얻을 수 있도록 여기에 게시합니다.
디자이너 클래스 앞에 클래스를 추가하면 MissingManifestResourceException
런타임에 예외 가 발생합니다 (컴파일 시간 오류 또는 경고 없음).
Visual Studio에서는 디자이너가 파일의 첫 번째 클래스를 사용해야합니다.
자세한 내용은 이 게시물을 참조하십시오 .
답변
나는 같은 문제가 있었지만 Timwi 가 제안한 대로 사용자 정의 도구 실행 명령을 사용하면 도움이되지 않습니다.
나는에 결국 때문에 그것은 올바른 방향으로 나를 이끌어 속성 의 된 .resx 파일. 여기서 문제가없는 다른 .resx 파일과 의 차이점을 발견했습니다 .
제 경우에는 “Build Action”속성을 “Resource”에서 “Embedded Resource”로 변경해야했습니다.
이유에 대한 가장 좋은 추측 은 다른 응용 프로그램에서 사용 된 라이브러리에 .resx 가 있다는 것 입니다. 내 응용 프로그램에는 자체 .resx 파일이 없으므로 라이브러리의 파일을 사용해야했습니다. 라이브러리에 포함되어 있고 “독립”상태가 아닌 경우에만 사용할 수 있습니다.
답변
비슷한 문제로 Vs 2012에서 실행하면 resx 파일의 “Custom Tool Namespace”속성이 잘못되었습니다 (제 경우에는 실제로 설정되지 않았으므로 생성 된 코드는 런타임 에이 예외를 무시합니다) . resx 파일의 최종 속성 세트는 다음과 같습니다.
- 빌드 조치 : 임베디드 자원
- 출력 디렉토리로 복사 : 복사하지 마십시오
- 사용자 정의 도구 : ResXFileCodeGenerator
- 사용자 지정 도구 네임 스페이스 : My.Project.S.Proper.Namespace
답변
MSBuild로 빌드 한 후 테스트를 실행할 때 MissingManifestResourceException 참조 (.mresource에 매니페스트에 경로가 있음)
나는 완전성을 위해 여기에 답을 반복합니다.
프로젝트 파일에 LogicalName을 추가하면 수정됩니다.
<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName>
즉, 프로젝트 파일에 포함 된 리소스 항목은 다음과 같습니다.
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
자세한 내용은 http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx에 나와 있습니다.
우리는 .resx 파일을 사용하고 있지만 버그는 여전히 발생하는 것으로 보입니다.
업데이트 : 리소스 문제 (XAML 포함)는 출력 경로 및 슬래시 사용과 관련이있는 것으로 보입니다.
프로젝트 출력 디렉토리를 수정하는 이유 : IOException이 처리되지 않았습니다. “리소스 ‘app.xaml’을 (를) 찾을 수 없습니다. “
답변
resx 파일과 관련이없는이 문제의 다른 원인이 발생했습니다. AssemblyInfo.cs에 다음이 포함 된 클래스 라이브러리가있었습니다.
[assembly: ThemeInfo(
ResourceDictionaryLocation.SourceAssembly,
ResourceDictionaryLocation.SourceAssembly)]
어셈블리에 WPF 코드, 테마 또는 리소스 사전이 포함되어 있지 않습니다. ThemeInfo 속성을 제거하여 예외를 제거했습니다.
나는 실제 예외를 얻지 못했습니다.
‘System.Resources.MissingManifestResourceException’유형의 첫 번째 예외입니다.
예외 세부 정보를보고 시스템에서 MyAssembly.g.resources를 요청했습니다.
이것이 다른 누군가에게 도움이되기를 바랍니다.