簡體   English   中英

如何從該基類的另一個VS項目中的基類中加載嵌入式資源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM