【问题标题】:What is the Resource Name for a Manifest Resource (Assembly.GetManifestResourceStream)?清单资源 (Assembly.GetManifestResourceStream) 的资源名称是什么?
【发布时间】:2013-02-22 23:49:10
【问题描述】:

我在我的 ASP.NET MVC 应用程序中嵌入了一个资源(一个 XSD 文件)。现在,我想从代码中检索这个文件。

查看Assembly.GetManifestResourceStream() 的文档,它接受一个字符串参数,即“被请求的清单资源的区分大小写的名称”。

嗯,我觉得这不是很有帮助,当然,在 MSDN 上也找不到示例。清单资源的名称是什么?是文件名吗?它是文件的完整路径和名称吗?或者它是为资源本身赋予的单独名称,如果是,我该如何设置该名称?

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc


    【解决方案1】:

    如果我没记错的话,它是程序集的名称加上文件的全名(包括扩展名),它们之间有一个点。

    快速确定的方法:使用Assembly.GetManifestResourceNames 方法:

    string[] result = myAssembly.GetManifestResourceNames();
    

    ...并在调试器中检查result 的内容。

    ETA:哎呀,如果您只有一个资源,您可以使用此代码来获取名称:

    string name = myAssembly.GetManifestResourceNames()[0];
    

    但我不建议这样做:我发现有时 VS 会创建空资源文件并将它们编译到程序集中,因此您可能拥有比您想象的更多的程序集资源。

    ETA 2018-06-26:我很惊讶我在 2013 年没有想到的另一种方式。这将为您提供基于原始资源名称的资源名称:

    string resourceFileName = "myResource.xsd";
    string resourceName = myAssembly.GetManifestResourceNames()
                                    .Where(name => name.Contains(resourceFileName))
                                    .FirstOrDefault();
    

    【讨论】:

    • 不只是程序集名称;它包括程序集设置中定义的“根命名空间”。我通常将根命名空间留空(VB.NET),并且资源名称永远不会被命名空间限定 - 即使在资源属性中设置了“自定义命名空间”。
    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 2021-09-13
    • 2011-06-17
    • 2015-06-12
    • 2012-01-17
    • 2022-12-03
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多