2017-11-02 3 views
0

모든,RDLC 보고서 - 내가 4.6을 .NET으로 그물 2에서 업그레이드하고 보고서

내에서 사용자 지정 코드를 사용하여 지역화 된 문자열 값에 액세스하지만 난 내 RDLC에 문제를 가지고하는 방법 (. 즉, 지역)를보고합니다.

특히 RDLC는 언어 별 .resx 파일에 대한 액세스를 수행하는 내 어셈블리 중 하나에서 참조 코드를보고합니다. 이를 통해 언어 별 문자열, 단어를 참조하는 보고서 식을 언어 독립적 인 방식으로 작성할 수 있습니다. 이것에

report.AddTrustedCodeModuleInCurrentAppDomain(); 

: 우리가 내가 specificially이에서 어셈블리 참조를 추가 코드를 다시 작성하도록 강요했다 새로운 CAS 변경 NET에서 4로 그물 2로 전환 될 때까지

모든 큰 일을

SetBasePermissionsForSandboxAppDomain(); 
AddFullTrustModuleInSandboxAppDomain(); 

하지만 이제는 내 맞춤 DLL이 현재 HTTP 컨텍스트가없는 보고서에 두 번째로로드되는 것을 확인했습니다. 현재 HTTP 컨텍스트없이 내가 통해 내 캐릭터의 .resx 파일에 액세스 할 수있는 방법이 없다 :를 통해 LANG 특정 문자열을 전달, BTW

: 따라서

String localizedValue = 
       (string)HttpContext.GetGlobalResourceObject(
        resourceFile, resourceKey); 

을, 나는 몇 가지 옵션을 가지고 있지만 방법이 작업을 수행하는 지침이 필요 매개 변수는 많은 문자열을 가지고 있기 때문에 실제로 옵션이 아닙니다. 이는 많은 맞춤 매개 변수를 의미합니다.

1) 내 .resx 파일 내부에서 lang 특정 문자열을 검색하는 다른 방법 (HttpContext.GetGlobalResourceObject없이 호출 할 수있는 다른 방법이 있습니까?) 또는 수동으로 .resx 파일로드 및 구문 분석 (많은 작업) 될

2) 어떻게 든 내 보고서 컨텍스트에서 현재 HTTP 컨텍스트를 가져옵니다. 나는 여기서 영리 해 지려고 노력했고 정적 변수를 현재 HTTP 컨텍스트로 초기화 한 정적 ctor를 만들었다. 불행하게도, 보고서 엔진이 보고서의 표현식을 평가할 때 동일한 어셈블리의 다른 버전을로드하는 것처럼 보입니다 (디버깅 할 때 관찰 된 것처럼).

3) 귀하가 제안한 다른 해결책.

+0

당신은 이것을하기 위해 ResourceManager 클래스를 사용합니까? –

+0

나는 노력하고 있어도 상관 없다. 예제에 대한 링크가있다? FYI : 내 리소스 문자열은 별도의 .resx 파일에 있습니다. – ActiveX

+0

필자는 결코 해본 적이 없지만 그럴듯한 것으로 보인다 ... 보고서에서 어셈블리를 참조 할 때는 ReportServer \ bin 폴더에 배포하고 액세스해야합니다. 해당 bin 폴더 안에 위성 어셈블리와 resx lang 폴더를 던져서 HttpClient가 필요하지 않은 Windows 응용 프로그램 에서처럼 ResourceManager를 호출 할 래퍼를 만들 수 있습니까? 웹 애플리케이션에서이 작업을 수행하는 유일한 방법은 보고서 페이로드가 반환 될 때 hackish post 렌더링 처리를 수행하는 것입니다. –

답변

0

다양한 가능성을 모색 한 후 언어 문자열의 위성 어셈블리를 만든 다음 제안 된대로 ResourceManager 클래스를 사용하여 어셈블리를로드하고 다른 어셈블리에서 문자열을 검색합니다.

FYI : 이 작업을 수행하려면 위성 폴더가 bin 폴더에 있어야합니다.