为什么GetManifestResourceStream在调用GetManifestResourceNames时存在资源名称时返回null?
我有一个Web应用程序项目。 我生成的DLL并将其导入到另一个项目中。 我实现了VirtualPathProvider
。
我遵循这个网站: http : //support.microsoft.com/kb/910441/en-us?spid=8940&sid=global ,一切正常,直到我添加另一个网站的主人。
- 我添加了
site_export.master
,并将其构build操作更改为embedded式资源。 - 我改变了我的网页使用新的网站主。
- 当我加载
site_export.master
时,GetManifestResourceStream()
返回null
。 - 我调用
GetManifestResourceNames()
来检查在DLL中是否存在site_export.master
并且它确实存在。 在列表中。 所有的名字空间都匹配。 我没有在这里列出名字空间。
为什么不能GetManifestResourceStream()
加载我的新site_export.master
? 它加载site.master
就好了。 我知道我的DLL被加载,因为我可以看到DLL中的其他文件。
请记住以下问题
第1步 。 build立行动设置为embedded式资源见
C#的GetManifestResourceStream问题
第2步 。 使用namespace.resourcename
请参阅GetManifestResourceStream()返回null?
实际上,如果访问另一个程序集中的私有资源,并且调用方没有带有ReflectionPermissionFlag.MemberAccess
标志的ReflectionPermissionFlag.MemberAccess
,则此方法返回null。
侧面提示。 为了确保你在正确的组装和正确的名称:转储和评估目标程序集中的所有可用资源
string[] names = assembly.GetManifestResourceNames();
(在我的情况下,我滥用另一个程序集的命名空间)
我这样做,使其工作:
步骤1:select资源(在我的情况下是CRDF.xsl),然后右键单击>属性。 将生成操作设置为“EmbeddedResource”和逻辑名称作为您select的名称,例如CRDFXSL。
第2步:像这样更改您的源代码:
Assembly _assembly; _assembly = Assembly.GetExecutingAssembly(); xslStream = _assembly.GetManifestResourceStream("CRDFXSL"); _xmlReader = XmlReader.Create(xslStream);
因此,一切都变得smoooooooth ..
提示和警告:如果“程序集名称”和“默认名称空间”在项目文件中不匹配,那么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
列出所有资源。