有没有一种方法可以查看一个.net dll中的资源?

8
我正在尝试调试Entity Framework错误:无法加载指定的元数据资源。 所有常规修复都对我不起作用,我想实际查看.csdl、.ssdl和.msl文件是否在资源中(就像它们应该在的那样)。
如果您知道一个可以做到这一点的免费工具,请回答。
注意:我没有访问Red Gates Reflector。我尝试了Resharper的新dotPeek,但它只显示代码,而不是资源。
有什么办法可以获取到我的dll中应该存在的这些资源吗?

即使您可能无法访问反射器,但他们确实提供该产品的14天试用期(假设您尚未这样做)。 - Jesse
即使如此,标准版也非常便宜,您只需花费一次酒吧的费用就可以购买。 - Ladislav Mrnka
2
JetBrains的ReSharper dotPeek现在支持查看资源。 - Jade
3个回答

13

6
我想知道为什么@George删除了他的回答,因为ILDASM确实会显示程序集清单中的资源:
.mresource public Model.csdl
{
  // Offset: 0x00000000 Length: 0x00000394
}
.mresource public Model.ssdl
{
  // Offset: 0x00000398 Length: 0x00000352
}
.mresource public Model.msl
{
  // Offset: 0x000006F0 Length: 0x000002B7
}

无论如何,您都会花时间等待答案,而不是考虑您已经可用的工具。写一个简单的控制台应用程序,它将简单地显示在您的程序集中包含的资源,怎么样?
using System;
using System.Reflection;

namespace AssemblyBrowser
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                System.Console.WriteLine("Provide path to assmebly!");
                return;
            }

            try
            {
                var assembly = Assembly.LoadFrom(args[0]);
                foreach (var name in assembly.GetManifestResourceNames())
                {
                    Console.WriteLine("Resource: {0}", name);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e.Message);
            }
        }
    }
}

GetManifestResourceNames提供的名称似乎与ResourceManager.GetStream期望的名称不同(该方法由SplashScreen.Show内部使用,这是我目前遇到问题的方法)。 - Grault

5

Jetbrains有一个很棒的反编译工具,叫做dotPeek。你可以在这里找到它:https://www.jetbrains.com/decompiler/

我更喜欢这个工具而不是Telerik的工具,因为它不需要创建账户,只需下载和安装即可。它看起来像这样:

enter image description here


这比Telerik的更好,因为它适用于.NET 5/6/7,而且“无需创建帐户,您可以直接下载并安装”。 - Santosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接