【求助]】Assembly.Load方法出错

daview 2009-02-09 11:14:33
开始在代码中使用 Type.GetType("System.Web.UI.WebControls.Label, System.Web", false, true),返回null,修改为Type.GetType("System.Web.UI.WebControls.Label, System.Web", true, true) 后跟踪异常,报告说找不到 System.Web 模块,事实上,这个桌面应用已经引用了System.Web.dll 这个模块(应该跟引用与否无关才对),把System.Web.Dll 复制到启动目录正常。

怀疑因为桌面应用的原因,尝试加载 System.Windows.Forms 下的类,一样的报告错误。

单独使用 System.Reflection.Assembly.Load("System.Web"),错误依然。

只要把目标Dll复制到运行目录就OK,奇怪呀,我电脑是安装的2008,麻烦解决下哈,我没时间耗这里,还得做别的。
...全文
164 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsToD 2009-02-09
  • 打赏
  • 举报
回复
如果你不嫌麻烦,就这样吧:
Type.GetType("System.Web.UI.WebControls.Label, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
必须用强名来描述程序集
CsToD 2009-02-09
  • 打赏
  • 举报
回复
Assembly.LoadFrom方法还不能解决问题?你直接把路径写进去就行了啊,如果想在别的机器上也可以,你可以使用环境变量以保证路径绝对正确啊
daview 2009-02-09
  • 打赏
  • 举报
回复
up
CsToD 2009-02-09
  • 打赏
  • 举报
回复
Assembly.LoadFrom
daview 2009-02-09
  • 打赏
  • 举报
回复
不是的。

Type.GetType的参数可以是:“typeFullName, ModalName"

比如:"System.Web.UI.WebControls.Lable, System.Web"

现在的问题是:System.Web 这个模块不会自动去系统库中搜索,只在当前运行文件夹搜索。我想是我的项目配置问题。
CsToD 2009-02-09
  • 打赏
  • 举报
回复
Type.GetType(string)这个只会检查mscorlib.dll和当前程序集的类型
daview 2009-02-09
  • 打赏
  • 举报
回复
不是我抠,而是我要的是怎么导致两个项目的不同的。原来的代码没有写死,我的代码本来写死也无所谓,但有问题总要解决的,给你分没问题,20分给出来了,难道我还能回收?

我不可能在代码里面写死使用的版本,而MS的WebMatrix又是可以的,所以我要找出问题来。要不,产品发布出去出现异常那可是大问题。

daview 2009-02-09
  • 打赏
  • 举报
回复
问题解决,是原来的配置与我的项目的配置不一致导致的。增加config如下:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Web" fullName="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblyBinding>
</runtime>


非常感谢你的答复。
CsToD 2009-02-09
  • 打赏
  • 举报
回复
用小沈阳的话说:你真够抠的。
20分的帖子,折腾半天,问题也解决了,也不揭贴。
算了,这20分不要也罢。
daview 2009-02-09
  • 打赏
  • 举报
回复
呵呵,你没看明白我的具体意思,假如有冲突,那么两个项目都应该有冲突才对,为什么同一台电脑的两个项目会出现这样的区别呢?这才是我的疑问。
CsToD 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 daview 的回复:]
我是反编译了MS的WebMatrix来弄的,以前在2.0的时候OK,现在3.5一样OK,我系统没安装1.0和1.1的版本,不存在System.Web模块冲突的问题。
[/Quote]

正是因为有冲突的“可能”,微软才禁止这样做,而不会因为实际没冲突就允许这样做。这是必然的道理
daview 2009-02-09
  • 打赏
  • 举报
回复
我是反编译了MS的WebMatrix来弄的,以前在2.0的时候OK,现在3.5一样OK,我系统没安装1.0和1.1的版本,不存在System.Web模块冲突的问题。
daview 2009-02-09
  • 打赏
  • 举报
回复
那代码很庞大,就是MS的WebMatrix的Web模块中的类Microsoft.Matrix.Packages.Web.Documents.RegisterDirectiveCollection中的方法GetObjectType(IServiceProvider serviceProvider, string tagPrefix, string typeName)
CsToD 2009-02-09
  • 打赏
  • 举报
回复
你把帖子结了吧,你把“在另外的代码中”发到我的邮箱ssyfzy@126.com
daview 2009-02-09
  • 打赏
  • 举报
回复
这个我明白,但我说的是,在另外的代码中(下载的)为什么没问题。
CsToD 2009-02-09
  • 打赏
  • 举报
回复
因为同名的程序集不只一个,比如System.Web.dll有2.0版本的,还有4.0版本(在VS2010中就有4.0版本的)的,同时存在于GAC中,不指明颁布,就不知道加载哪一个
揭贴吧
daview 2009-02-09
  • 打赏
  • 举报
回复
用你6楼的方法是没问题,但我就没整明白,为什么要这样。

其实,使用FullName是很好,限定了版本等信息,完全唯一。但同样我电脑上,同样的2008,通用的使用3.5建的项目,一个是下载的代码,一个是我自己的代码(其实也是从下载代码复制的),但我代码中就不行。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧