a previous question에서 언급했듯이 프로그램 수명 기간 동안 변경되지 않지만 문자열 목록에 대한 비싼 작업을 통해서만 얻을 수있는 문자열 리소스 집합이 있습니다. 이 파일은 다음에 복사 컴파일C# 응용 프로그램에서 지역화되지 않은 리소스를 사용할 수 없습니다.
StatesUS=A(LA(SK|BAM)A|RKANSAS)|B.....
Countries=UNITED (STATES|KINGDOM)|CA(NAD|MBODI)A.....
: 성능을 개선하기위한 시도에서
public static class Patterns
{
Public static readonly string StateUS =
@"\b(?<STATE>" + CharTree.GenerateRegex(FixedLists.StateUS) + @")\b";
Public static readonly string Countries =
@"\b(?<STATE>" + CharTree.GenerateRegex(FixedLists.Countries) + @")\b";
//.....
}
, 나는 파일에서 목록을 읽고 리소스 파일
Regex.restext
를 출력 T4와 원하는 캐릭터를 생성 한 타 rget 디렉토리의 빌드 후 :
cd $(ProjectDir)
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\resgen.exe" /compile Regex.restext
copy /Y Regex.resources "$(TargetDir)MyProject.Resources.Lists.resources"
하지만 Patterns
의 정적 생성자 내에서 이러한 값을로드 할 때 :
ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("MyProject.Resources.Lists", @".\", null);
StateUS = rm.GetString("StateUS")
를 내가받을 다음과 같은 오류 :
InnerException: System.Resources.MissingManifestResourceException
Message=Could not find any resources appropriate for the specified culture (or the neutral culture) on disk.
System.Resources.FileBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
그러나 이것은 문화 중립적 인 프로젝트입니다. 자원은 단지 저장을위한 것입니다. 그렇다면 왜 내가 문화를 지정해야 할 필요가 있을까요? 어떻게/어떻게하면 좋을까요?
그리고 내 리소스를로드하는 데 잘못된 방법을 사용하고 있다면 더 좋은 방법은 무엇입니까?
정적 인 경우 한 번 생성 한 다음 복사하여 소스 코드에 붙여 넣으십시오. –
기본 목록은 소프트웨어 버전간에 상당히 자주 변경되기 때문에. – Arithmomaniac