为什么在调用 GetManifestResourceNames 时,GetManifestResourceStream

本文关键字:GetManifestResourceStream GetManifestResourceNames 调用 为什么 | 更新日期: 2023-09-27 18:35:04

我有一个Web应用程序项目。 我生成了 DLL 并将其导入到另一个项目中。 我实现了VirtualPathProvider.

我关注了这个网站:http://support.microsoft.com/kb/910441/en-us?spid=8940&sid=global,一切正常,直到我添加另一个网站管理员。

  1. 我添加了site_export.master并将其生成操作更改为"嵌入资源"。
  2. 我更改了页面以使用新的网站母版。
  3. GetManifestResourceStream()加载site_export.master时返回null
  4. 我打电话给GetManifestResourceNames()检查 DLL 中是否存在site_export.master并且确实存在。 它在列表中。所有命名空间都匹配。我没有在这里列出名称空间。

为什么GetManifestResourceStream()无法加载我的新site_export.master? 它加载site.master很好。 我知道我的 DLL 已加载,因为我可以看到 DLL 中的其他文件。

为什么在调用 GetManifestResourceNames 时,GetManifestResourceStream

请记住以下问题...

第 1 步。将生成操作设置为嵌入的资源,请参见

C#的GetManifestResourceStream Gotcha

第 2 步。使用 namespace.resourcename 查看 GetManifestResourceStream() 返回 null ?

实际上,如果访问了另一个程序集中的私有资源,并且调用方没有带有 ReflectionPermissionFlag.MemberAccess 标志的ReflectionPermission,则此方法返回 null。

侧面提示。若要确保您位于正确的程序集中并使用正确的名称,请执行以下操作: 转储并评估目标程序集中的所有可用资源

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列出所有资源。

相关文章:
  • 没有找到相关文章