【发布时间】:2013-01-02 03:46:25
【问题描述】:
我在我的应用程序中嵌入了一些 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"));
这也有效,但仅如果我运行编译的程序集。当我用调试器运行它时,我得到一个来自GetManifestResourceStream() 的NullReferenceException。
所以我把命名空间搞砸了,对吧?不,我检查并再次检查。命名空间是正确的,如果不是,我会在正在运行的程序集中遇到异常。 (每当发生异常时我都会记录)我还使用 .NET Reflector 仔细检查了资源是否确实以我期望的名称存在。
我还三重检查并确保 Build Action 设置为 Embedded Resource 但没有任何效果。我提醒您,当我在调试器之外运行 exe 并且可以打印 XML 时,它工作正常。但是,当使用调试器运行时,它返回 null 并且程序崩溃。
什么可能导致GetManifestResourceStream() 仅在调试时返回 null?
【问题讨论】:
-
在调试器中运行时调用程序集是什么? (我会把它作为一个局部变量提取出来,然后先检查一下。)
-
是的,乔恩,我只是想到了这一点。由于我愚蠢地从
Main()调用我的代码,调用程序集就是调试器。我想要GetExecutingAssembly()...总是这些小事花费我最多的时间。
标签: c# .net visual-studio-2010 debugging embedded-resource