我在我的应用程序中嵌入了一些XML资源,它可以加载XSD文件,但不能加载XML文件。这是我如何加载XSD文件。GetManifestResourceStream()在调试器中返回NULL
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()'...它总是这些小东西这花费我最多的时间。 – vanneto