我在我的应用程序中嵌入了一些 XML 资源,它可以加载 XSD 文件,但不能加载 XML 文件。这就是我加载 XSD 文件的方式。
private static XmlSchema LoadXsdResource(string folder, string xsdName)
{
string filename = string.Format("Namespace.{0}.{1}.xsd", folder, xsdName);
using (Stream stream = Assembly.GetCallingAssembly().GetManifestResourceStream(filename))
{
return XmlSchema.Read(stream, (o, e) =>
{
log.Warn(string.Format("Napaka pri parsanju XSD sheme {0}: {1}: {2}", e.Severity, e.Message, filename));
});
}
}
我在其他地方加载 XML:
XDocument xdoc = XDocument.Load(Assembly.GetCallingAssembly().GetManifestResourceStream("Namespace.Resources.Oddaja.xml"));
这也有效,但前提是我运行编译的程序集。当我使用调试器运行它时,我得到一个NullReferenceException
来自GetManifestResourceStream()
.
所以我把命名空间搞砸了,对吧?不,我检查并再次检查。命名空间是正确的,如果不是,我会在正在运行的程序集中遇到异常。(每当发生异常时,我都会记录)我还使用 .NET Reflector 仔细检查了资源是否确实以我期望的名称存在。
我还三重检查并确保Build Action
设置为Embedded Resource
但没有任何效果。我提醒您,当我在调试器之外运行 exe 并且可以打印 XML 时,它工作正常。但是,当使用调试器运行时,它返回 null 并且程序崩溃。
什么可能导致GetManifestResourceStream()
仅在调试时返回 null?