2012-03-29 6 views
0

여러 인공 위성 어셈블리 (.dll)에 여러 .resources 파일을 컴파일 할 때 리소스가 표시되지 않습니다. 단일 리소스를 컴파일하면 작동합니다. 다음은 내가 사용한 단계들입니다.ResGen 및 AL을 사용하여 여러 resx/resources 파일을 사용하는 강력한 명명 된 위성 어셈블리

  1. "보고서 뷰어"라는 프로젝트가 있습니다. 이 프로젝트는 속성> 서명> 어셈블리 서명을 통해 MySnKey.snk 키를 사용하여 서명되고 강력한 이름의 키 파일 MySnKey.snk를 선택합니다.
  2. 모든 양식이 Localizable = True로 업데이트되었습니다.
  3. 모든 resx 파일을 독일어 de-DE로 처리했습니다. MainForm.resx (프로젝트 루트 디렉토리)와 Resources.resx (속성 디렉토리)의 두 가지 resx 만 있습니다.
  4. 이 파일의 번역 된 버전 인 MainForm.de-DE.resx 및 Resources.de-DE.resx가있는 폴더가 있습니다. resgen을 사용
  5. ,

    > "C : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v6.0A \ 빈 \ ResGen"/ 컴파일 Resources.de-DE.resx ReportViewer.Resources.de-DE.resources

    > "C : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v6.0A \ 빈 \ ResGen"/ 컴파일 MainForm.de-DE.resx ReportViewer.MainForm.de-DE.resources

적절한 .resources 파일이 작성됩니다. 이제 연결하려면 AL.exe :

> "C : \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ AL"/ t : lib /embed:ReportViewer.MainForm.de-DE를 사용하십시오. 리소스, ReportViewer.Resources.de-DE.resources/culture : de-DE /out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/Debug/ReportViewer.exe/keyfile : ../ MySnKey.snk

이렇게하면 ReportViewer.resources.dll 파일이 만들어집니다. 해당 하위 폴더 de-DE> ReportViewer.resources.dll에 배치하면 운이 없습니다. 실행 호출하기 전에, 나는 단지

> "C와 같은 MainForm을 포함 할 경우 Program.cs에서, 나는

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 

가 : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v6.0A \ 빈 \ AL "/ t : lib /embed:ReportViewer.MainForm.de-DE.resources/culture : de-DE /out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/ Debug/ReportViewer.exe /keyfile:../MySnKey.snk

적절한 리소스가 표시됩니다.

이것은 상당히 혼란 스럽습니다. .resx 파일을 솔루션에 추가하고 컴파일하면 출력 dll이 제대로 작동하지만이 위성 번역을 솔루션에 적용하지 않아도됩니다.

오류가 생성되지 않고 파일이 만들어져서 내가하지 않는 것에 대해 분실했습니다.

도움을 주시면 대단히 감사하겠습니다. 필자는 AL.exe를 실행할 때 솔루션에 파일을 출력 파일에 추가 할 때 출력 dll 간의 차이점을 비교했으며 둘 다 모든 번역을 포함합니다.내가

은 분명히 내가 삽입 옵션과 혼동있어 질문에 대답 할 수 없기 때문에

편집 솔루션을 포함하고 그것을 사용합니다. 제대로 AL.exe 유틸리티를 사용하려면, 내가 사용했다 : 그 속성 네임 스페이스 위

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" Resources.de-DE.resx ReportViewer.Properties.Resources.de-DE.resources 

공지 사항이 추가됩니다. 나는 전에 그것을하지 않았다.

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" MainForm.de-DE.resx ReportViewer.MainForm.de-DE.resources 

MainForm은 ReportViewer 네임 스페이스에 있으므로 속성 네임 스페이스가 추가되지 않습니다.

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\AL" 
/t:lib 
/embed:ReportViewer.Properties.Resources.de-DE.resources 
/embed:ReportViewer.MainForm.de-DE.resources 
/culture:de-DE /out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/Debug/ReportViewer.exe /keyfile:../MySnKey.snk 

이 줄에는 여러 개의/포함 된 항목이 있습니다. 나는 쉼표를 사용하고 있었는데, 이는 내부의 이름을 바꾸었고 내가 원했던 것이 아닙니다. 파일들 사이에 공간을 제공하면 관련없는 (겉으로보기에는) 오류가 발생합니다. 멋진 기사는 http://ondotnet.com/pub/a/dotnet/2002/10/14/local2.htm?page=2을 참조하십시오.

완성도를 들어,이 스크립트를 작성하는 또 다른 방법은 더 이름 변경이 여기에 수행되지 않도록

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" Resources.de-DE.resx 

통지 될 것이다, 출력은 단순히 Resources.de-DE.resources

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ResGen" MainForm.de-DE.resx 

통지입니다 여기에서 이름 변경이 없으면 출력은 MainForm.de-DE입니다 .resource

> "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\AL" /t:lib 
/embed:Resources.de-DE.resources,ReportViewer.Properties.Resources.de-DE.resources 
/embed:MainForm.de-DE.resources,ReportViewer.MainForm.de-DE.resources 
/culture:de-DE 
/out:ReportViewer.resources.dll /template:../../../Output/ReportViewer/bin/Debug/ReportViewer.exe /keyfile:../MySnKey.snk 

N 임베드 옵션의 쉼표 다음에 이름 바꾸기가 수행됩니다. 첫 번째 인수는 파일 이름 (.resources 파일)이고 쉼표 다음은 정규화 된 이름 (namespace.class.xx-XX.resources)입니다.

답변

0

내가 여기에 대답 할 수 있기 전에 게시물에 답변되어 있습니다.