我在我的應用程序中嵌入了一些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