[英]How to load an embedded resource from a base class that is in another VS project from that base class
嘗試將XSD嵌入由多個派生類程序集使用的基類程序集中。
Visual Studio 2013項目A:
namespace A.B.C
{
public abstract class WidgetBase {
protected virtual void LoadSchema() {
var schemas = new XmlSchemaSet();
using (var resourceStream = this.GetType().Assembly.GetManifestResourceStream("A.B.C.Schemas.SchemaA.xsd"))
{
...Load the schema...
}
}
}
}
在csproj 2中,我有一個使用該基類的類:
Visual Stdio 2013項目B
namespace D.E
{
public class WidgetDerived : WidgetBase {
public string DoSomethingWithXml(string xmlFile)
{
var schema = base.LoadSchema();
...do something...
}
}
}
問題是我無法在對象瀏覽器中找到XSD或將資源路徑設置為:
var resourceStream = this.GetType().Assembly.GetManifestResourceStream("A.B.C.Schemas.SchemaA.xsd")
var resourceStream = typeof(WidgetBase).Assembly.GetManifestResourceStream("A.B.C.Schemas.SchemaA.xsd")
var resourceStream = typeof(WidgetBase).Assembly.GetManifestResourceStream("D.E.Schemas.SchemaA.xsd")
如果我從相對磁盤路徑加載XSD,則代碼運行良好。 作為嵌入式資源,我不確定它的去向。 我認為它將被嵌入在基類程序集中,因此對其可見。
當資源位於另一個程序集和同一程序集(此處和https://support.microsoft.com/en-us/kb/319292等)中時,我已經看到了使用GetManifestResourceStream的其他答案,但是當基礎派生類進行調用后,該類將加載自己的程序集。 從理論上講,它應該與從自身加載時完全相同,但這種方式不起作用。
克魯德。 我首先嘗試的東西,但有一個錯字:
var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("A.B.C.Schemas.FuzzyTestPlan.xsd")
因此,僅供參考,它確實使用名稱空間和相對程序集的代碼路徑。 只需確保輸入正確即可。 :s
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.