GetManifestResourceNames를 호출할 때 리소스 이름이 존재하는 동안 GetManifestResourceStream이 null을 반환하는 이유는 무엇입니까?
저는 웹 애플리케이션 프로젝트가 있습니다.DLL을 생성하여 다른 프로젝트로 가져왔습니다.구현했습니다.VirtualPathProvider
.
저는 이 웹사이트인 http://support.microsoft.com/kb/910441/en-us?spid=8940&sid=global, 을 팔로우했고 다른 사이트 마스터를 추가하기 전까지는 모든 것이 작동합니다.
- 추가했습니다.
site_export.master
빌드 작업을 Embedded Resource로 변경했습니다. - 새 사이트 마스터를 사용하기 위해 페이지를 변경했습니다.
GetManifestResourceStream()
돌아온다null
적재할 때site_export.master
.- 부를게요
GetManifestResourceNames()
확인하기 위해site_export.master
DLL에 존재하며 존재합니다.리스트에 있습니다.모든 이름 공간이 일치합니다.여기에 이름 공간을 기재하지 않았습니다.
왜 안 돼요?GetManifestResourceStream()
내 새 것을 로드합니다.site_export.master
로딩됩니다.site.master
잘 돼가고 있습니다.DLL에서 다른 파일을 볼 수 있기 때문에 DLL이 로드된 것으로 알고 있습니다.
다음 문제를 기억하십시오...
1단계. 임베디드 리소스로 설정된 빌드 작업 참조
C#의 GetManifestResourceStream Gotcha
2단계. 사용namespace.resourcename
GetManifestResourceStream()에서 null을 반환하는 항목을 참조하십시오.
실제로 이 메서드는 다른 어셈블리의 개인 리소스에 액세스하고 호출자에게 다음이 없으면 null을 반환합니다.ReflectionPermission
와 함께ReflectionPermissionFlag.MemberAccess
깃발
사이드 힌트.올바른 어셈블리에 올바른 이름을 사용하고 있는지 확인하려면: 대상 어셈블리에서 사용 가능한 모든 리소스를 덤프하고 평가합니다.
string[] names = assembly.GetManifestResourceNames();
(저의 경우 다른 어셈블리의 네임스페이스를 잘못 사용했습니다.)
저는 그것을 작동시키기 위해 이것을 했습니다.
1단계: 리소스(내 경우 CRDF.xsl)를 선택하고 > 속성을 마우스 오른쪽 버튼으로 클릭합니다.빌드 작업을 "포함된 리소스"로 설정하고 논리적 이름을 선택한 이름(예: CRDFXSL)으로 설정합니다.
2단계: 소스 코드를 다음과 같이 변경합니다.
Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();
xslStream = _assembly.GetManifestResourceStream("CRDFXSL");
_xmlReader = XmlReader.Create(xslStream);
그래서 모든 것이 순조로웠습니다.
힌트 및 주의:프로젝트 파일에서 "어셈블리 이름"과 "기본 네임스페이스"가 일치하지 않으면 GetManifestResourceStream도 null을 반환합니다.GetManifestResourceNames는 어셈블리 이름을 여전히 반환하지만 로드 중에는 매니페스트가 작동하지 않습니다.
사용해 보십시오.
Dim ctx As Windows.ApplicationModel.Resources.Core.ResourceContext = New Windows.ApplicationModel.Resources.Core.ResourceContext()
ctx.Languages = {Globalization.CultureInfo.CurrentUICulture.Name}
Dim rmap As Windows.ApplicationModel.Resources.Core.ResourceMap = Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap
Dim res = rmap.GetValue("Assets/sample.png", ctx)
Dim resFile = Await res.GetValueAsFileAsync
그Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap
모든 리소스를 나열합니다.
언급URL : https://stackoverflow.com/questions/10726857/why-does-getmanifestresourcestream-returns-null-while-the-resource-name-exists-w
'source' 카테고리의 다른 글
Spring MongoRepository가 삽입하는 대신 업데이트 중이거나 다시 시작되고 있습니다. (0) | 2023.07.01 |
---|---|
ORA-01036: C#을 통해 쿼리를 실행할 때 잘못된 변수 이름/번호 (0) | 2023.07.01 |
패키지 오라클 내부의 모든 프로시저 목록을 가져오는 방법 (0) | 2023.07.01 |
파일을 특정 버전으로 재설정하거나 되돌리는 방법은 무엇입니까? (0) | 2023.07.01 |
Excel vba 시트 모듈에 프로그래밍 방식으로 코드 추가 (0) | 2023.07.01 |