C#中,如何通过反射获取dll中的嵌入资源

有一个a.dll,它其中有一个b.xml是嵌入的资源。现在我希望通过反射在我自己的程序中把这个a.dll中的b.xml的内容给读出来,请详细写清楚方法。多谢了我换成Loa... 有一个a.dll,它其中有一个b.xml是嵌入的资源。现在我希望通过反射在我自己的程序中把这个a.dll中的b.xml的内容给读出来,请详细写清楚方法。多谢了
我换成LoadFile的时候,它也是报“未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“Biz.Client.SM.CreateAccount.Version.xml.resources”正确嵌入或链接到程序集“Biz.Client.SM.CreateAccount”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。”这个是为什么?。我就是无法生成那个流
展开
 我来答
cnmahj
2008-04-21 · TA获得超过954个赞
知道小有建树答主
回答量:785
采纳率:0%
帮助的人:1069万
展开全部
System.Reflection.Assembly dll = System.Reflection.Assembly.LoadFile("文件路径");
Stream xmls = dll.GetManifestResourceStream("a.dll的命名空间.项目中的文件路径.文件名");

后面就可以把这个xml作为正常的xml文件的流来使用了。

不好意思,只是按照自己的想法写的。没有去实践。
这个问题是我写错函数了。用load函数的话。参数是dll的命名空间。我已经改了上面的source。
你试一下。

试了一下,这样就好用了。

LoadFile,中的参数是你的dll的路径。不是xml的路径。
匿名用户
2008-04-28
展开全部
System.Reflection.Assembly dll = System.Reflection.Assembly.LoadFile("文件路径");
Stream xmls = dll.GetManifestResourceStream("a.dll的命名空间.项目中的文件路径.文件名");
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ben
2015-05-22 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
刚好我最近再写一个工厂.
以下是我的代码
将我的自定义类的内容去掉以后就是获取DLL的嵌入资源的代码了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Madison.Server.MethodFactory
{
public class MethodFactory
{
private static Assembly dllAssembly = null;
private MethodFactory() { }
private static List<MadisonMethodInfo> allMethodInfo = new List<MadisonMethodInfo>();

public static MethodFactory LoadDll(string dllFilePath)
{
dllAssembly = Assembly.LoadFile(dllFilePath);
var allTypes = dllAssembly.GetTypes();
LoadAllMethod(allTypes.ToList());
return new MethodFactory();
}

private static void LoadAllMethod(List<Type> allTypes)
{
if (allTypes.Count > 1)
{
var typeMethods = allTypes[0].GetMethods();
for (int i = 0; i < typeMethods.Count(); i++)
{
if (
typeMethods[i].GetCustomAttribute(typeof(MadisonMethodAttribute)) != null
&&
(typeMethods[i].GetCustomAttribute(typeof(MadisonMethodAttribute)) as MadisonMethodAttribute).UsingMethod
)
{
allMethodInfo.Add(MadisonMethodInfo.Create(typeMethods[i]));
}
}

}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zealic
2008-04-08 · TA获得超过290个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:373万
展开全部
System.Reflection.Assembly dll = System.Reflection.Assembly.LoadFile("a.dll");
Stream stream = dll.GetManifestResourceStream("Biz.Client.SM.CreateAccount.Version.xml");

这属于你的文件放在项目根目录的情况,如果你的Version.xml放在文件夹内
GetManifestResourceStream 的参数就为 "<文件路径>.<名字空间>.Version.xml"

OK?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
情系小太阳
2008-04-09 · TA获得超过148个赞
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:142万
展开全部
//获取<ShortBoom.dll>程序集中的chimes.wav音频文件.

System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream s = a.GetManifestResourceStream("<ShortBoom>.chimes.wav");

SoundPlayer sp = new SoundPlayer(s);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式