关于c#:为什么我不能使用GetExecutingAssembly.GetFile()访问文件?

Why can't I access a file using GetExecutingAssembly.GetFile()?

本问题已经有最佳答案,请猛点这里访问。

这段代码是为了帮助我理解而简化的。实际代码将在调用程序集中查找XML文件。但是,在这个简化的示例中,我甚至无法访问XML文件。我已将testfile.xml设置为嵌入资源。你知道为什么这个代码不起作用吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Reflection;

namespace Testing
{
    class Program
    {
        static void Main(string[] args)
        {
            var test = new A();
            test.TestGettingAssemblies();

            Console.ReadKey();
        }
    }

    internal class A
    {
        internal void TestGettingAssemblies()
        {
            Console.WriteLine(Assembly.GetExecutingAssembly().FullName);
            Console.WriteLine(Assembly.GetExecutingAssembly().GetFile("TestFile.xml") == null);
            Console.WriteLine(Assembly.GetCallingAssembly().FullName);
        }
    }
}

结果代码


解决方案:

1
2
3
4
5
6
var assembly = Assembly.GetExecutingAssembly();
using(var stream = assembly.GetManifestResourceStream("TestFile.xml"))
using(TextReader tr = new StreamReader(stream))
{
      Console.WriteLine(tr.ReadToEnd());
}

这里的更多信息)。

它它不工作,我会建议你呼叫assembly.GetManifestResourceNames()和检查如果result contanins"testfile.xml"