如何将资源嵌入另一个项目中
假设我有一个C#类库项目,它只包含xml文件作为嵌入式资源。 我想从另一个解决方案项目中访问这些资源。 由于’class’库不包含类,因此很难获得如下所示的程序集:
typeof(ClassName).Assembly ...
最终获得嵌入式资源。 有没有办法获得嵌入式资源,而无需硬编码任何魔术字符串等? 谢谢。
PS:
这似乎是目前可行的唯一方式:
var assembly = typeof(FakeClass).Assembly; var stream = assembly.GetManifestResourceStream("Data.Blas.xml");
我在’数据’程序集中创建了一个’假类’。
您可以使用Assembly.GetManifestResourceStream()从嵌入式程序集加载xml文件。
System.IO.Stream s = this.GetType().Assembly.GetManifestResourceStream("ActivityListItemData.xml");
编辑
您可以使用Assembly.Load()并加载目标程序集并从那里读取资源。
Assembly.LoadFrom("Embedded Assembly Path").GetManifestResourceStream("ActivityListItemData.xml");
您可以按照https://support.microsoft.com/kb/837908中描述的方式使用.config文件
当我不想在项目中使用松散文件时,我发现这种方法非常有效。 它可以应用于任何组件。
在下面的示例中,项目根目录中有一个名为“MyDocuments”的文件夹和一个名为“Document.pdf”的文件。 该文档标记为嵌入式资源。
您可以像这样访问资源,在调用GetManifestResourceStream()之前先构建命名空间:
Assembly assembly = Assembly.GetExecutingAssembly(); string ns = typeof(Program).Namespace; string name = String.Format("{0}.MyDocuments.Document.pdf", ns); using (var stream = assembly.GetManifestResourceStream(name)) { if (stream == null) return null; byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); return buffer; }
我发现的唯一问题是当名称空间包含’。’之后的数字时。 (例如MyDocuments.462)。 当命名空间是数字时,编译器将在前面添加下划线(因此MyDocuments.462变为MyDocuments._462)。
上述就是C#学习教程:如何将资源嵌入另一个项目中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013154.html