我有一个Web应用程序项目。我生成了DLL并将其导入另一个项目。我实施了VirtualPathProvider
。
我关注了这个网站:http://support.microsoft.com/kb/910441/en-us?spid=8940&sid=global,一切正常,直到我添加另一个网站管理员。
site_export.master
并将其Build Action更改为Embedded Resource。GetManifestResourceStream()
时,null
会返回site_export.master
。GetManifestResourceNames()
来检查DLL中是否存在site_export.master
。它在列表中。所有名称空间都匹配。我没有在这里列出名称空间。为什么GetManifestResourceStream()
无法加载我的新site_export.master
?它加载site.master
就好了。我知道我的DLL已加载,因为我可以看到DLL中的其他文件。
答案 0 :(得分:84)
请记住以下问题......
第1步。构建设置为嵌入资源的操作,请参阅
C#’s GetManifestResourceStream Gotcha
第2步。使用namespace.resourcename
,请参阅GetManifestResourceStream() returns null ?
实际上,如果访问另一个程序集中的私有资源并且调用者没有带ReflectionPermission
标记的ReflectionPermissionFlag.MemberAccess
,则此方法返回null。
答案 1 :(得分:65)
侧面提示。确保您使用正确的名称并使用正确的名称:转储并评估目标程序集中可用的所有资源
string[] names = assembly.GetManifestResourceNames();
(在我的情况下,我误用了另一个程序集中的命名空间)
答案 2 :(得分:7)
我这样做是为了让它发挥作用:
第1步:选择资源(在我的情况下为CRDF.xsl),然后右键单击>属性。 将Build Action设置为" EmbeddedResource"和逻辑名称到您选择的名称,例如CRDFXSL。
第2步:更改您的源代码:
Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();
xslStream = _assembly.GetManifestResourceStream("CRDFXSL");
_xmlReader = XmlReader.Create(xslStream);
因此一切都变得很糟糕......
答案 3 :(得分:2)
提示和注意: 如果"汇编名称"和"默认命名空间"在项目文件中不匹配,那么GetManifestResourceStream也将返回null。 GetManifestResourceNames仍然返回程序集的名称,但在加载期间清单不起作用。
答案 4 :(得分:0)
试试这个:
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
列出所有资源。