2012-09-12 5 views
2

VS2008에서 VS2010으로 솔루션을 마이그레이션 할 때 문제가 있습니다. 문제는 런타임에 관리되는 리소스가 올바른 이름으로 포함되어 있지 않기 때문에 찾을 수없는 것입니다.Visual Studio 2010에서 어떻게 자원 논리 이름을 설정합니까?

"지정된 문화권이나 중립 문화권에 적절한 리소스를 찾을 수 없습니다. .ViewDocument.resources "가 올바르게 임베드되었거나 컴파일 타임에 어셈블리"RSProcess "에 링크되었거나 필요한 모든 위성 어셈블리를로드 할 수 있고 완전히 서명했음을 나타냅니다."

일반적으로 System.Resources.MissingManifestResourceException은 형식 ID를 전달하여 생성 된 리소스의 ApplyResources 호출에서 초기화됩니다. 내 경우에는 네임 스페이스가 프로덕션이고 클래스 이름은 ViewDocument입니다. 그러나 (ViewDocument.resx에서 생성 된) 자원은 resx 파일이있는 폴더 구조 (이 경우 Production.folder1.folder2.ViewDocument.resources)에서 이름이 지정됩니다.

VS2008에서 .resx 파일의 Managed Resources/General/Resource Logical Name 설정에서 (기본) 논리 이름을 재정의 할 수 있습니다. VS2010에서이 작업을 수행 할 수 없습니다 -이 설정을 완전하게 무시합니다! 이 문제를 해결하는 방법이 있습니까?

마지막으로 한 가지 방법은 현재 폴더 구조를 제거하고 모든 파일을 루트 프로젝트 폴더로 옮기는 것입니다.하지만이 작업은 필자의 경우 상당히 많은 것으로 보입니다.

제안 사항?

답변

2

나는 내 자신의 질문에 대한 답을 찾았습니다!

나를 혼란스럽게하는 VS2010에서 몇 가지 변화가있었습니다. 첫째, VS2008에서 .resource 파일의 이름은 프로젝트 설정 'Resource Logical Name'의 영향을 받았으며 VS2010에서는 프로젝트의 루트 네임 스페이스와 확장 된 네임 스페이스에 따라 파일의 이름이 항상 지정됩니다. 둘째, 마이그레이션 할 때 % (Filename)로 대체 된 매크로 $ (InputFile)을 사용했기 때문에 이러한 설정이 지워졌습니다.

이 문제를 해결하기 위해 프로젝트 레벨에서 '자원 논리 이름'을 정의했거나 프로젝트 속성 페이지를 $ (RootNamespace). % (Filename) .resources로 정의했습니다. .resource 파일은 여전히 ​​확장 이름 (폴더가있는 폴더에 의해 정의 됨)을 가져옵니다. 그러나 MSBuild에서 로그 파일을 확인하면 논리 이름이/ASSEMBLYRESOURCE swich에 리소스 파일 이름 외에 링커에 나타남을 볼 수 있습니다! 다시 빌드 한 후 ComponentResourceManager는 이제보기의 유형 인 Rootnamespace.filename을 사용하여 'InitializeComponent'의 리소스를 찾습니다. 또한 뷰 클래스가 클래스와 동일한 이름을 가진 파일에 있다고 가정합니다.

관련 문제