programing

지정된 문화 또는 중립 문화에 적합한 리소스를 찾을 수 없습니다.

magicmemo 2023. 4. 26. 23:13
반응형

지정된 문화 또는 중립 문화에 적합한 리소스를 찾을 수 없습니다.

저는 ASP가 2개 있습니다.NET 웹 프로젝트(프로젝트 A 및 프로젝트 B).Project A의 클래스가 리소스 파일 Blah.resx를 사용하는 Project B의 클래스를 인스턴스화할 때 다음 오류가 발생합니다.

'System' 유형의 예외입니다.자원.MissingManifestResourceException'이(가) mscorlib.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다.

지정한 문화 또는 중립 문화에 적합한 리소스를 찾을 수 없습니다."Resources"를 확인합니다.Blah.resources"가 컴파일 시 "App_GlobalResources.sn_flri6" 어셈블리에 올바르게 포함되거나 연결되었거나 필요한 모든 위성 어셈블리가 로드 가능하고 완전히 서명되었는지 확인합니다.

이것의 원인은 무엇입니까?

http://support.microsoft.com/kb/318603 에 대한 Microsoft 사이트의 기사는 다음과 같습니다.

이 문제를 해결하려면 양식의 클래스 정의 뒤에 나타나도록 다른 모든 클래스 정의를 이동합니다.

이것은 Windows Forms 프로젝트용 솔루션입니다. 웹 프로젝트에도 해당되는지 잘 모르겠습니다.

저는 방금 WPF 프로젝트에서 같은 예외를 발견했습니다.했습니다.ProblemAssembly.SupportProblemAssembly.Controls어셈블리에 있는 두 번째 리소스 파일에서 리소스에 액세스할 때 예외가 발생했습니다.

추가 리소스 파일이 이전 네임스페이스 이름에서 새 네임스페이스 이름으로 참조를 제대로 이동하지 않은 것으로 나타났습니다.

리소스 파일의 designer.cs 에는 리소스 관리자를 가져오는 정적 속성이 있습니다.해당 게터 내에서 문자열은 여전히 이전 네임스페이스를 참조하고 있었습니다.새 네임스페이스로 수정한 후 문제가 해결되었습니다.

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Support.Properties.Stuff", typeof(Stuff).Assembly);

다음과 같아야 합니다.

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Controls.Properties.Stuff", typeof(Stuff).Assembly);

저는 다음과 같이 문제를 해결했습니다.

  1. 리소스 파일을 마우스 오른쪽 단추로 클릭한 다음 "속성"을 클릭합니다.
  2. "Build Action" 속성 컴파일을 "Embedded Resource"로 변경
  3. 그런 다음 빌드 및 실행

완벽하게 작동합니다.

한 C# 프로젝트의 resource.resx 파일을 다른 C# 프로젝트와 공유하려고 했을 때 이 문제가 발생했습니다.양식 클래스를 파일의 시작 부분으로 이동하는 제안이 적절하지 않았습니다.이렇게 풀었습니다.기본적으로 두 번째 프로젝트에서 첫 번째 프로젝트로 연결된 링크를 사용한 다음 재생성을 활성화합니다.resource.designer.csjava.

  1. 두번프트의프삭을 합니다.Properties/Resources.resx
  2. 번째 첫번프트의항을 합니다.Properties/Resources.resx파일을 두 번째 프로젝트의 속성 폴더에 대한 링크로 사용할 수 있습니다.프로젝트의 루트 수준에 추가하지 마십시오.
  3. 번째 프로젝트의 항목을 추가하지 않음Properties/Resources.designer.cs!
  4. 의 .Resources.resx,더하다ResXFileCodeGenerator사용자 지정 로 사용할 수 .
  5. 마우스 오른쪽 버튼을 클릭Resources.resx사용자 지정 도구 실행을 선택합니다.새 designer.cs 파일이 생성됩니다.

참고: resource.designer.cs 파일은 자동 생성되므로 편집하지 않습니다.

제 경우, 잘못 생각된 일련의 글로벌 텍스트 교체가 리소스 디자이너 cs 파일의 이 줄을 실수로 변경했습니다.

여기에 이미지 설명 입력

해당 인수의 네임스페이스가 클래스의 네임스페이스와 더 이상 일치하지 않기 때문에 런타임에 응용 프로그램이 혼동되었습니다.

디자이너의 네임스페이스가 해당 줄의 문자열 인수와 일치하는지 확인합니다.

그것은 발생합니다 왜냐하면*.resх마이그레이션에서 제외됩니다.

  • 리소스 파일을 마우스 오른쪽 버튼으로 클릭합니다.
  • "Include in project" 메뉴 항목을 클릭합니다.

이 문제에 직면한 사용자의 경우 에서 문제가 발생합니다.NET Core 3.0, 이는 에서 이루어진 획기적인 변경과 관련이 있을 수 있습니다.NET Core 3.0, 방금 설정한 문제 해결EmbeddedResourceUseDependentUponConvention프로젝트 csproj에서 거짓:

<PropertyGroup>
  <EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>

프로젝트에서 resx 파일을 제외하고 designer.cs 파일을 삭제한 후 다시 포함하면 네임스페이스 리팩토링(Cfink의 답변에 따라)을 수행한 후 종종 이러한 문제가 해결되었습니다.

아무도 이 해결책을 언급하지 않은 것 같습니다.정말로 당연합니다. 하지만 잠시 저를 넘어뜨렸어요.

" " " " 입니다.Internal(또는)Friend에서) .Net에서)로 변경해야 합니다.Public

(resx 디자이너에서 액세스 수정자에 대한 드롭다운이 상단에 있습니다.)

리소스 파일이 저장된 프로젝트로 이동하여 ItemGroup으로 스크롤하고 컴파일러가 예상하는 경로에 해당하는 논리 이름을 추가하여 이 문제를 해결했습니다.

Embedded Resource는 다음과 같습니다.

   <ItemGroup>
    <EmbeddedResource Update="Properties\TextResources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>

지금은 이렇게 보입니다.

  <ItemGroup>
    <EmbeddedResource Update="Properties\TextResources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
      <LogicalName>MyProject.Properties.Resources.resources</LogicalName>
    </EmbeddedResource>
  </ItemGroup>

시비 엘랑고스의 대답만으로는 충분하지 않아서, 나는 다음과 같이 해야만 했습니다.

  • 리소스 파일을 마우스 오른쪽 버튼으로 클릭합니다.
  • "빌드 액션" 속성 변경
  • "내장 리소스"로 컴파일
  • 빌드 및 배포

_GlobalResources 됩니다./bin폴더, 이제 해당 폴더를 웹 응용 프로그램의 루트에도 복사합니다.

저의 경우, 클래스 정의의 순서가 잘못되어 발생한 문제입니다.예를 들어 Form 클래스 앞에 다른 클래스 정의를 추가했습니다.

namespace MyBuggyWorld
{
    public class BackendObject //This hack broke the VS 2017 winform designer and resources linker!
    {
        public TcpClient ActiveClient { get; set; }
        public BackgroundWorker ActiveWorker { get; set; }
    }

    public partial class FormMain : Form
    {
    }
}

후 동후이.BackendObject파일 끝까지(다른 파일로 이동하는 것이 더 낫지만) 프로젝트 정리 + 재구축을 수행하면 문제가 해결되었습니다.

이 경우와 관련하여 리소스를 포함하는 어셈블리의 기본 네임스페이스가 동일한 텍스트(Project->Properties->Default namespace; VS)로 설정되어 있는지 확인합니다. resx 파일의 BuildAction 속성이 "Embedded resource"로 설정되어 있는지도 확인합니다. 즐겨...;)

한 가지 접근 방식은 공유 클래스/리소스를 별도의 클래스 라이브러리 프로젝트에 넣고 두 웹 사이트에서 모두 참조하는 것입니다.

@Cfink 감사합니다! 다른 사람들에게 팁을 추가하기 위해서입니다: 저는 이것으로 ResourceManager 줄을 변경했습니다:

New Global.System.Resources.ResourceManager(Reflection.Assembly.GetCallingAssembly.GetName.Name & ".CommonNameOf.Resources", Reflection.Assembly.GetCallingAssembly())

저는 vb.net 에 있지만 C#에서는 문자열을 연결하는 데 & 대신 +가 유일한 차이점이라고 생각합니다.

이렇게 하면 리소스를 공유하는 두 개의 유사한 프로젝트에서 동일한 링크된 어셈블리 파일을 사용할 수 있습니다.

다른 사건입니다.두 개의 프로젝트로 솔루션을 복사하여 Windows 탐색기(폴더 이름, .sln 및 .csproj 파일 이름)에서 부분적으로 이름을 바꾸고 Visual Studio(이름 공간 등)에서 대규모 찾기 및 바꾸기 작업을 수행했습니다.그럼에도 불구하고 OP가 언급한 예외는 여전히 발생했습니다.어셈블리네임스페이스 이름이 여전히 오래된 것으로 확인되었습니다.

프로젝트와 다른 모든 것들이 이미 오피스 스타일로 명명되었지만,Assembly name그리고.Default namespace여전히 링크커스라는 이름이었습니다.

구태

이 수정 후 모든 것이 다시 정상적으로 작동했습니다. 컴파일 후 실행 시간 :)

새로운 상황

resx 디자이너 파일은 반사에 의존하기 때문에 이 오류는 Dotfucation에서도 발생합니다.Dotfulcator를 사용하는 경우 resx 파일이 손상됩니다.항상 난독화 프로세스에서 제외 항목으로 추가해야 합니다.

사용할 때

HttpContext.GetGlobalResourceObject()

해당 통화를 try/catch 문 안에 넣지 않으면 오류가 발생합니다.

저에게 문제는 한 프로젝트에서 다른 프로젝트로 .resx 파일과 관련 .cs 파일을 복사하는 것이었습니다.두 프로젝트 모두 네임스페이스가 같아서 문제가 되지 않았습니다.

솔루션 탐색기에서 원래 프로젝트에서 .resx 파일이 .cs 파일에 종속되어 있다는 것을 알았을 때 마침내 해결되었습니다.

MyResource.cs
|_ MyResource.resx

복사된 프로젝트에서 .cs 파일은 .resx 파일에 종속되어 있었습니다.

MyResource.resx
|_ MyResource.cs

두 번째 프로젝트에서는 어떻게든 .resx 파일이 .cs 파일을 자동 생성하도록 설정되어 있었습니다.자동 생성된 .cs 파일은 원래 프로젝트에서 복사된 .cs 파일을 덮어쓰고 있었습니다.

문제를 해결하려면 복사된 프로젝트에 있는 각 .resx 파일의 속성을 편집합니다.사용자 지정 도구 속성은 ResXFileCodeGenerator와 같은 것으로 설정됩니다..resx 파일의 사용자 지정 도구 속성을 지웁니다..cs 파일은 자동 생성된 파일에 의해 덮어쓰므로 원래 프로젝트에서 다시 복사해야 합니다.

일치하지 않는 네임스페이스로 인해 발생할 수 있습니다.상위 답변에서 두 번째 답변(Sibi Elango's)은 resx 파일을 마우스 오른쪽 버튼으로 클릭하고 빌드 옵션을 EmbeddedResource로 변경하라는 메시지를 표시하지만, 저는 이미 그렇게 했고 여전히 오류가 발생했습니다.상위 답변(CFink's)은 수동으로 파일을 편집하여 이 문제를 해결하는 방법을 언급하지만, MonoDevelop에서 이 문제가 발생하여 리소스를 호출하는 cs 파일(아래 코드와 같은 코드가 포함된 파일)과 동일하게 기본 네임스페이스를 설정해야 했습니다.

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

GUI를 통해 기본 네임스페이스를 설정한 후 위 라인에서 더 이상 예외가 발생하지 않습니다.

솔루션에 단일 프로젝트가 포함된 WinForms 애플리케이션이 있습니다.
타팅겟.NET Framework 4.0
용사를 합니다.SharpDevelop 4.3내 아이디로

바보같이 들리지만, 저는 우연히도Logical Name이 에설된재로 되었습니다."Resources" 돈으로"Resources.resx"파일입니다. 일단 제가 그 재산을 정리하면, 모든 것이 엉망진창으로 작동합니다.

일반적으로 임의 파일을 다음과 같이 추가할 때EmbeddedResource당신은 일반적으로 설정하기를 원합니다.Logical Name합리적인 무언가에, 어떤 이유에서, 나는 같은 일을 했습니다.Resources.resx파일을 작성하고 모든 걸 망쳤어요

이것이 누군가에게 도움이 되기를 바랍니다.

에는 이 이 나의경우라, 코인추가다니습었되이들드에 되었습니다.Web.config많은 도움이 되었습니다.

<system.web>
     ...
    <globalization uiCulture="cs" culture="cs-CZ" />
     ...
<system.web>

작업과 : 빌드작과함께업:Embedded Resource 지정 도구: 및사자지도:PublicResXFileCodeGenerator.

또 다른 원인은 네임스페이스에 하이픈("-")이 있으면 올바르게 빌드되고 실행되지만 리소스에 액세스할 수 없다는 것입니다.네임스페이스(식별자)에는 하이픈이 없어야 하지만 리소스를 로드하는 경우를 제외하고는 이 기능이 적용되지 않습니다.이것은 지난 10년 동안 저를 두 번이나 태웠습니다.

마이그레이션 명령 실행으로 인해 이 문제가 발생했습니다.Update-Database패키지 관리자 콘솔에서.

수락된 답변이 제 문제를 해결하지 못했습니다.

을 빌드작에변했야습다니에서 .CompileEmbedded Resource제게 효과가 있었습니다.

다음 단계를 사용하여 동일한 작업을 수행할 수 있습니다.

  1. 마이그레이션을 마우스 오른쪽 버튼으로 클릭합니다.
  2. "Build Action" 속성 "Compile"을 "Embedded Resource"로 변경
  3. Update-Database 명령을 실행합니다.

제 경우에는 한 프로젝트에서 다른 프로젝트로 양식을 마이그레이션하려고 했습니다.알고 보니 제가 덧붙이는 것을 잊어버렸을 뿐입니다.Form.resx새 프로젝트로.이 양식에서 저는 일부 아이콘을 사용하고 있었기 때문에 리소스에 종속되어 있었습니다.

나에게 그것은 다음과 같았습니다.MyStrings.Designer.cs파일 이름:

global::System.Resources.ResourceManager temp = 
    new global::System.Resources.ResourceManager(
      "MyApplication.MyProject", typeof(MyStrings).Assembly);

라고 생각했습니다.MyApplication.MyProject파일의 디렉터리가 아닌 클래스의 네임스페이스를 참조했습니다.는 그 을 나는그하을디위배치다니습했라는 했습니다.Resources이름 공간은 그걸 반영하지 않았어요

로 변경했습니다.

global::System.Resources.ResourceManager temp = 
    new global::System.Resources.ResourceManager(
      "MyApplication.MyProject.Resources", typeof(MyStrings).Assembly);

그리고 효과가 있었습니다! (이름 공간을 업데이트할 필요도 없었습니다!)

저도 같은 문제에 직면해 있었고, 답변에 언급된 모든 해결책을 시도했지만 아무 것도 효과가 없는 것 같았습니다.TFS에 코드를 체크인하는 동안 발견되었습니다.TFS는 디자이너 파일에서만 확인한 Resx 파일을 체크인하지 않았습니다.그래서 다른 모든 개발자들은 그들의 컴퓨터에서 실행하는 동안 이 문제에 직면했습니다.resx 파일을 수동으로 체크인하면 작업이 완료됩니다.

또한 EmbeddedResource에 LogicalName 또는 ManifestResourceName이 정의되어 있는지 확인해야 합니다.리소스가 예상치 못한 이름으로 사용될 수 있으므로 프로젝트 파일에서 해당 이름을 사용하는 경우 해당 이름이 적절하게 정의되었는지 확인합니다.

EF에서 update-database 명령을 실행하려고 할 때 동일한 문제가 발생했습니다.예외를 발생시킨 마이그레이션에서 .resx 파일이 프로젝트에서 제외된 것으로 나타났습니다..resx 파일을 마우스 오른쪽 단추로 클릭하고 "Include In Project"를 클릭했습니다.문제는 해결됐습니다.

저 같은 경우에는.Build Action리소스 파일이 이미 있습니다.Embedded Resource 달릴 마다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠupdate-database동일한 오류가 발생했기 때문에 동료 단계를 수행하여 작동했습니다.

  1. Build ActionCompile
  2. 빌드(오류가 너무 많음)
  3. Back 뒤로Build ActionEmbedded Resource
  4. update-database

그리고 어떤 이유에서인지 효과가 있었습니다.

NetCore 프로젝트와 유사한 문제가 있었는데 마이그레이션을 추가한 후에 알게 되었습니다.WhateverMigration , ,.resx가 EmbeddedResource에 되지 않은 파일 입니다..csproj심지어 모든 것이 괜찮아 보였는데도.그래서 나는 나의.csproj파일과 나는 다음을 추가했습니다.

<EmbeddedResource Update="Migrations\202107071914322_WhateverMigration.resx">
    <Generator></Generator>
    <DependentUpon>202107071914322_WhateverMigration.cs</DependentUpon>
</EmbeddedResource>

언급URL : https://stackoverflow.com/questions/2058441/could-not-find-any-resources-appropriate-for-the-specified-culture-or-the-neutra

반응형