从嵌入式资源中删除带前缀的名称空间

斯凯勒·桑德斯

如何使用以下代码仅提取不包括名称空间的文件名?当前,此代码包含GetManifestResourceNames()中的整个命名空间。

 Assembly assembly = System.Reflection.Assembly.LoadFile(resourceLocation + @"\\" + file);


            string[] names = assembly.GetManifestResourceNames();

            foreach (var name in names.Where(x => x.EndsWith("xsd")).ToList())
            {
                using (System.IO.Stream stream = assembly.GetManifestResourceStream(name))
                {

                    using (System.IO.FileStream fileStream = new System.IO.FileStream(System.IO.Path.Combine(outputDir, name), System.IO.FileMode.Create))
火星红

您可以使用GetManifestResourceInfo来获取其他信息,例如文件名。

以您的示例为例,您可能会得到如下所示的结果:

string[] names = assembly.GetManifestResourceNames();

foreach (var name in names.Where(x => x.EndsWith("xsd")).ToList())
{
    var info = assembly.GetManifestResourceInfo(name);
    if (info != null)
    {
        var fileName = info.FileName;
        // Do your stuff that needs filename here.
    }

}

编辑:如果您发现在以下情况下GetManifestResourceInfo返回null,则此SO帖子可能是相关的:为什么在调用GetManifestResourceNames时资源名称存在时GetManifestResourceStream返回null?

应该设置资源以构建“嵌入式资源”操作,并且这里提到了代码安全陷阱:http : //adrianmejia.com/blog/2011/07/18/cs-getmanifestresourcestream-gotcha/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章