问个关于安装包制作的问题

speedfirst 2010-05-22 09:08:10
刚刚写了一个邮件相关的程序,用到了CDO库(对应C:\windows\system32\cdosys.dll)。引入了之后VS添加了一个Interop.CDO的包装库。实现完毕后做安装包,但在build的时候说:
Error 2 'cdosys.dll' should be excluded because its source file 'C:\Windows\system32\cdosys.dll' is under Windows System File Protection.

没法子只好Exclude之。但是之后做好的安装包安装完毕后在使用时又会报错找不到Interop.CDO:

System.IO.FileNotFoundException: 未能加载文件或程序集“Interop.CDO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=90cae95723576639”或它的某一个依赖项。系统找不到指定的文件。
文件名:“Interop.CDO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=90cae95723576639”
在 XXX.PreviewHandlers.EmlPreviewHandler.InternetExplorerPreviewHandlerControl.Load(FileInfo file)
在 XXX.FileBasedPreviewHandler.Load(PreviewHandlerControl c)
在 XXX.PreviewHandler.<XXX.IPreviewHandler.DoPreview>b__2()

警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

看了一下安装目录里确实有Interop.CDO.dll啊,不知为何会找不到。
请问哪位大虾帮忙看看怎么解决,谢谢。
...全文
157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
speedfirst 2010-05-22
  • 打赏
  • 举报
回复
CDO这个组件是自从Windows2000后一直随Windows安装的吧。Interop.CDO是不是必须放在windows /system32下~?我马上检查一下注册表里有没有Interop.CDO

[Quote=引用 3 楼 shao5155285 的回复:]

是不是你的组件需要注册 如果如果要注册的话 需要写入注册表
否则的话找不到 另外检查下 是否放在了正确的目录下
[/Quote]
speedfirst 2010-05-22
  • 打赏
  • 举报
回复
非常感谢。不过System.Net.Mail.MailMessage唯独没有Save和Load功能,造成没法读写eml文件。所以用CDO也是不得已。

[Quote=引用 1 楼 zhoufoxcn 的回复:]

如果是.NET2.0及以上版本的话,直接使用2.0里面的做法好了,尽量避免使用CDO这种方式。
.net类库中发送电子邮件的方法总结
发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址,通常验证电子邮件真实有效的办法是:当用户填写的注册资料经过网站初步格式验证之后,……
[/Quote]
weiki516 2010-05-22
  • 打赏
  • 举报
回复
是不是你的组件需要注册 如果如果要注册的话 需要写入注册表
否则的话找不到 另外检查下 是否放在了正确的目录下
自由_ 2010-05-22
  • 打赏
  • 举报
回复
学习
帮顶
周公 2010-05-22
  • 打赏
  • 举报
回复
如果是.NET2.0及以上版本的话,直接使用2.0里面的做法好了,尽量避免使用CDO这种方式。
.net类库中发送电子邮件的方法总结
发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址,通常验证电子邮件真实有效的办法是:当用户填写的注册资料经过网站初步格式验证之后,用户并不能利用此帐号登录,系统会向用户注册时填写的电子邮件地址发送一封电子邮件,邮件中给出一个链接,只有当用户点击了这个链接之后才能登录到网站,如果用户填写的电子邮件地址不是真实有效的或者不是他本人的,就不会收到这封电子邮件,这样仍然不能登录,这一步一般称之为电子邮件激活。在.net类库中有两种发送电子邮件的方式,一种是在.net2.0以下版本中的做法,一种是.net2.0以上版本的做法。下面分别介绍这两种办法。
speedfirst 2010-05-22
  • 打赏
  • 举报
回复
自己解决了,把Interop.CDO.dll这类的东西都放到system32目录下就可以了。估计放Global Assembly Cache里也行,不过懒得生成强名称了。不知道这样做是不是很elegant。

感谢诸位。
cjnkd 2010-05-22
  • 打赏
  • 举报
回复
帮顶一个

110,535

社区成员

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

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

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