从错误信息思考一个问题:.NET Framework 与 COM/COM+ 到底有多深入的关联呢?


今天
针对2个程序文件, 用csc压了一个multi-file Assembly,发现了一个问题:

(1) SumNumber.cs,编译为 SumNumber.netmodule

csc /target:module /out:bin/Debug/SumNumber.netmodule SumNumber.cs


(2) Program.cs,编译为 MyConsole.exe,作为程序执行文件

csc /target:exe /addmodule:bin/Debug/SumNumber.netmodule /out:bin/Debug/MyConsole.exe Progarm.cs


这样执行是没有问题的!

然后我把SumNumber.netmodule删除掉,再次执行MyConsole.exe,出现了下面的错误:

未处理的异常:  System.IO.FileNotFoundException: 未能加载文件或程序集“SumNumberM
odule.netmodule”或它的某一个依赖项。系统找不到指定的文件。
文件名:“SumNumberModule.netmodule” ---> System.IO.FileNotFoundException: 系统
找不到指定的文件。 (异常来自 HRESULT:0x80070002)
   在 MySolution.Program.Main(String[] args)


眼瞅见 FileNotFoundException 倒没有什么,可是看到HRESULT就有点让我迷惑了:难道这里引发异常的根源是一个COM对象产生的?

问题来了:.NET Framework 与 COM/COM+ 到底有多深入的关联呢?

先做个标记,这几天研究一下...

======================================================
资料,From MSDN :
HRESULT .NET 例外狀況

MSEE_E_APPDOMAINUNLOADED

AppDomainUnloadedException

COR_E_APPLICATION

ApplicationException

COR_E_ARGUMENT 或 E_INVALIDARG

ArgumentException

COR_E_ARGUMENTOUTOFRANGE

ArgumentOutOfRangeException

COR_E_ARITHMETIC 或 ERROR_ARITHMETIC_OVERFLOW

ArithmeticException

COR_E_ARRAYTYPEMISMATCH

ArrayTypeMismatchException

COR_E_BADIMAGEFORMAT 或 ERROR_BAD_FORMAT

BadImageFormatException

COR_E_COMEMULATE_ERROR

COMEmulateException

COR_E_CONTEXTMARSHAL

ContextMarshalException

COR_E_CORE

CoreException

NTE_FAIL

CryptographicException

COR_E_DIRECTORYNOTFOUND 或 ERROR_PATH_NOT_FOUND

DirectoryNotFoundException

COR_E_DIVIDEBYZERO

DivideByZeroException

COR_E_DUPLICATEWAITOBJECT

DuplicateWaitObjectException

COR_E_ENDOFSTREAM

EndOfStreamException

COR_E_TYPELOAD

EntryPointNotFoundException

COR_E_EXCEPTION

Exception

COR_E_EXECUTIONENGINE

ExecutionEngineException

COR_E_FIELDACCESS

FieldAccessException

COR_E_FILENOTFOUND 或 ERROR_FILE_NOT_FOUND

FileNotFoundException

COR_E_FORMAT

FormatException

COR_E_INDEXOUTOFRANGE

IndexOutOfRangeException

COR_E_INVALIDCAST 或 E_NOINTERFACE

InvalidCastException

COR_E_INVALIDCOMOBJECT

InvalidComObjectException

COR_E_INVALIDFILTERCRITERIA

InvalidFilterCriteriaException

COR_E_INVALIDOLEVARIANTTYPE

InvalidOleVariantTypeException

COR_E_INVALIDOPERATION

InvalidOperationException

COR_E_IO

IOException

COR_E_MEMBERACCESS

AccessException

COR_E_METHODACCESS

MethodAccessException

COR_E_MISSINGFIELD

MissingFieldException

COR_E_MISSINGMANIFESTRESOURCE

MissingManifestResourceException

COR_E_MISSINGMEMBER

MissingMemberException

COR_E_MISSINGMETHOD

MissingMethodException

COR_E_MULTICASTNOTSUPPORTED

MulticastNotSupportedException

COR_E_NOTFINITENUMBER

NotFiniteNumberException

E_NOTIMPL

NotImplementedException

COR_E_NOTSUPPORTED

NotSupportedException

COR_E_NULLREFERENCE 或 E_POINTER

NullReferenceException

COR_E_OUTOFMEMORY 或

E_OUTOFMEMORY

OutOfMemoryException

COR_E_OVERFLOW

OverflowException

COR_E_PATHTOOLONG 或 ERROR_FILENAME_EXCED_RANGE

PathTooLongException

COR_E_RANK

RankException

COR_E_REFLECTIONTYPELOAD

ReflectionTypeLoadException

COR_E_REMOTING

RemotingException

COR_E_SAFEARRAYTYPEMISMATCH

SafeArrayTypeMismatchException

COR_E_SECURITY

SecurityException

COR_E_SERIALIZATION

SerializationException

COR_E_STACKOVERFLOW 或 ERROR_STACK_OVERFLOW

StackOverflowException

COR_E_SYNCHRONIZATIONLOCK

SynchronizationLockException

COR_E_SYSTEM

SystemException

COR_E_TARGET

TargetException

COR_E_TARGETINVOCATION

TargetInvocationException

COR_E_TARGETPARAMCOUNT

TargetParameterCountException

COR_E_THREADABORTED

ThreadAbortException

COR_E_THREADINTERRUPTED

ThreadInterruptedException

COR_E_THREADSTATE

ThreadStateException

COR_E_THREADSTOP

ThreadStopException

COR_E_TYPELOAD

TypeLoadException

COR_E_TYPEINITIALIZATION

TypeInitializationException

COR_E_VERIFICATION

VerificationException

COR_E_WEAKREFERENCE

WeakReferenceException

COR_E_VTABLECALLSNOTSUPPORTED

VTableCallsNotSupportedException

所有其他 HRESULT

COMException


第一部分 了解COM 第1章 COM概述 何谓CoM COM术语 COMCOM的好处 COM的局限性 COM组件接口 何谓接口 接口特征 接口类型 接口规则 接口设计 COM组件的实现规则 实现IUnknown规则 内存管理规则 引用计数规则 COM激活 COM类型 COM客户机 COM服务器 ActiveX控件 COM面向对象技术 包装 抽象 态 继承 COMTrader应用程序 小结 第2章 由VC++建立并使用COM服务器 IDL文件 建立第一个COM服务器 定义自定义接口 实现IUnknown和自定义接口 完成COM服务器 生成测试客户机 用ATL建立COM服务器 关于ATL 用ATL建立进程内COM服务器 用ATL建立进程外COM服务器 线程COM服务器 Win32线程应用 线程COM组件 自动化IDispatch 用VC++实现IDispatch ATL自动化 Automation数据类型 再谈类型库 C++自动化客户机 VB自动化客户机 小结 第3章 用VB建立并使用COM服务器 选择COM项目 设计接口 描述接口 浏览接口 生成对象 使用ClassBuilder 增加属性 增加方法 增加事件枚举 使用ActiveXDataObject(ADO) 在服务器组件中使用Recordset对象 在客户机组件中使用ADOR 生成断开的Recodset 生成自己的RecodsctS 使用用户定义类型 错误处理 服务器客户机错误处理 使用VBErr.Raise机制 在VB中使用线程模型 设置线程模型 了解再入性公寓 小结 第二部分 COMInternet 第4章 在VC++中建立并使用ActiveX控件 ACtiveX控件概还 属性方法 控件容器通信 事件连接点 建立第一个控件 生成控件 测试控件 增加方法 增加属性 增加事件 增加属性页 允许属性保持 使用控件 建立复合控件 增加复合控件 增加功能 增加事件 处理复合控件事件 处理错误 使用控件 小结 第5章 在VB中建立并使用ActiveX控件 VB控件简介 约束无约束控件 控件生成技术 属性类型 方法 属性配置 过程属性 环境属性配置 运行时只读属性 只在运行时有效的属性 扩展属性 容器属性 合成控件属性 可关联属性 持续属性包 属性包 使用ActiveX控件界面向导 了解控件寿命 生成ActiveX控件 生成无约束控件 生成设计时数据约束控件 生成运行数据约束控件 小结 第6章 用VC++建立InternetCOM组件 IEActiveX控件 轻量级控件 安全控件 持续属性 文档对象模型编程 活动服务器组件 活动服务器页面 ASP页面的COM组件 小结 第7章 用VB建立InternetCOM组件 无窗口控件 ActiveX控件容器的线程模型 ActiveX控件的安全性 Web页面访问 VBDHTML项目 DHTML项目基础 DHTML应用程序样本 VBIIS应用程序 WebClass 一个IIS应用程序样本 设计控件 设计控件HTML文件 样本设计控件 小结 第三部分 了解DCOM 第8章 DCOM概述 何谓DCOM 为什么使用DCOM DCOM操作 DCOM组件位置 进程内或进程外组件 代理 RPC(RemoteProcedureCall,远程过程调用) 调动 数据传递 DCOM配置实用程序 DCOM应用程序的安全机制 验证 授权 加密 整性检查 小结 第9章 用VC++建立DCOM服务器 标准自定义调动 标准调动 自定又调动 网络通伯 远程激活 AppID注册表项 可配置AppID注册表项参数 IUknown优化 DCOMNT服务 NT服务解剖 基于NT服务的COM服务器 小结 第10章 用VB建立DCOM服务器 应用程序对象模型 何谓对象模型 如何生成对象模型 DCOM设计准则技术 再论调动 按数值按引用 DCOM进程外服务器 建立DCOM组件 增加测试客户机 IIS应用程序 增加WebClasses 使用模板 增加自定义Webltems 远程错误处理 小结 第四部分 了解COM++ 第11章 COM++概述 COMWindowsDNA 用户界面层技术 中间层技术 数据库层技术 组件服务配置 事务处理 排队组件(QC) 实时结构的限制 事务性消息排队 排队组件结构 排队组件故障恢复 QC安全性 动态负荷平衡 对象地 小结 第12章 用VC++建立COM++组件 ADO编程 ADOOLEDB VC++中的ADO VC++的ADO扩展 建立COM++应用程序 温习IObjectContext接口 用ATL建立COM++组件 编制基于角色的安全性 处理COM+事务 控制事务结果 指定事务属性 确定事务情境 传递接口指针 共享状态 建立事务性COM+组件 小结 第13章 用VB建立COM+组件 了解事务 事务层应用程序 COM事务 事务属性:ACID COM+系统简介 COM+运行环境 COMComponentServices COM+接口 资源分配器 应用程序组件 探索COM+编程模型 COM+组件作为COMDLL 基本COM+编程规则 COM+API 用VB编程COM+ 对象描述表 COM+组件的生命周期 ObjectControl接口 MTS活动 COM+中生成对象 安全引用 组件之间的参数传递 数据类型 使用分布式事务 分布式事务协调器(MSDTC) COM+事务的工作 事务有状态对象 使用共享属性管理器(SPMSharedProperyManager) 小结 第14章 了解MSMQ 何谓MSMQ MSMQ的好处 MSMQ组件 队列 消息 MSMQ对象模型 MSMQ设置 MSMQ基础 消息发送 消息接收 MSMQ事件 MSMQ事务 小结 第五部分 高级COMCOM+ 第15章 VC++VB中的COM+服务 了解COM+激活 描述表包装器 激活顺序 使用即时(JIT)激活 使用对象构造 中性公寓简介 了解同步域 表示事务状态 取得对象信息 使用对象地 对象池的好处 对象地要求 对象地配置 使用排队组件 QC限制 QC配置 QC调用 QC播放控件 使用负荷平衡 负荷平衡要求 负荷平衡配置 小结 第16章 COMCOM+安全性 何谓安全性 WindowsNT安全简介 NT验证 NT扮演 NT访问控制 COM安全结构 验证 访问控制 启动权限 标_ 扮演掩盖 安全总括 COM+安全 COM+说明性安全 COM+角色 编程COMCOM+安全 整个进程安全 接口级安全 激活安全 服务器方安全 调用描述表安全信息 SecuntyProperty信息 安全性数据库访问 小结 第17章 Windows2000中的新COM特性 同步机制 COM同步API COM同步接口 异步COM 异步接口构造 异步接口调用 关于异步服务器客户机 让服务器进行异步处理 调用序列化自动完成 COM管道 COM管道接口 异步管道提前读取 调用对象调用取消 调用取消请求 调用取消处理 轻量级处理器 标准LWH 自定义LWH 小结 第六部分 调试部署COMCOM+应用程序 第18章 调试剖析COMCOM+应用程序 调试VB组件 调试MTS组件 调试COM+组件 使用条件编译 调试VC++组件 用VisualStUdioAnalyzer剖析 小结 第19章 部署COMCOM+应用程序 DCOM应用程序部署 配置DCOM服务器 配置DCOM客户机 在Internet上部署 Internet上部署包装 签名CAB文件 许可ActiveX控件 自动化COM+配置 使用COMAdmin接口集合 配置COM+应用程序 配置组件 配置角色 部署COM+应用程序 小结
RemObjects 文档翻译 RemObjects SDK文档总目录 这些年来生成了很文档,这当然是好事情,但是却很难从中找到你需要的. 本文目标包括: • 提供基本文章推荐的阅读顺序 • 最近的更新列表,说明有什么变化 • 展示所有文档的状态 • 告诉你那个文档被更新 • 那个文档中的范例可以下载 当人们搜索适当的文章时可能有不同的需要,例如你可能很熟悉我们的产品只想看看随着时间的推移产品有少改变,这样,推荐你使用下面的阅读顺序: • see 查看RemObjects SDK新特性 • see 从Win32到.NET • see 对'Vinci'的更新 • see 跨平台和其他技术的整合 • see 了解产品架构 • see 产品提供的源码范例 • see 用贡献的文档 • see 老版本 • see 最近的更新文档 这个文档包含所有可用的文章列表list. 注意:本文章随着其它文章的更新而更新。而且最近相关文档也不完整,对'Vinci' 的回顾和更新将放在下面合适的地方 RemObjects SDK新手上路 如果你刚接触我们的产品,那么你可能对基于RemObject SDK的Data Abstract产品没有什么了解 WP01. • RO05 – 如何写 RemObjects SDK服务器端 (Delphi Version) • RO06 – 如何写RemObjects SDK客户端 (Delphi Version) • RO45 -如何写 RemObjects SDK服务器端 (.NET Version) • RO46 -如何写RemObjects SDK客户端 (.NET Version) • RO25 – 理解客户端 • RO29 – 使用服务端测试工具 • RO41 – 将.NET 标准事件处理变为RemObjects SDK执行方式 • RO42 – 介绍对Free Pascal支持 - new for 'Vinci' 从Win32到.NET 为了迁移的需要,你可能已经发现有些文档存在.Net版本,或有些文章包含.Net的相关信息.使用标记Delphi 或.NET 将嵌入在已经存在的Delphi应用程序的代码转到.Net一个选择是使用Hydra产品 . • RO16 – 类工厂预览 • RO25 – 理解客户端 • 如何写RemObjects SDK服务端 - Delphi: RO05, .NET: RO45 • 如何写RemObjects SDK客户端 - Delphi: RO06, .NET: RO46 • HY09 –主要介绍Hydra 3.0.1 对'Vinci'的更新 下面的文档包含了对'Vinci'的变化,你将会看到new for 'Vinci'标记. • RO38 – 比较RemObjects SDK通道 - new for 'Vinci' • RO40 – 对XML-RPC的支持 - new for 'Vinci' • RO25 – 理解客户端 • RO37 – 新的Super通道 • RO42 – 介绍对Free Pascal的支持 - new for 'Vinci' 跨平台和其他技术的整合 • RO42 -介绍对Free Pascal的支持 - new for 'Vinci' • RO40 -对XML-RPC的支持 - new for 'Vinci' • RO19 – DataSnap整合包 • RO20 – 如何用DataSnap类写服务端 • RO21 – 不用DataSnapModule 的简单DataSnap服务端 理解架构 • RO25 – 理解客户端 • RO07 - Smart Services™ • RO16 –类工厂预览 • RO37 – 新的Super通道 • RO38 – 比对RemObjects SDK的通道- new for 'Vinci' • RO11 – 使用RemObjects SDK创建异步执行客户端 • RO15 – 原理: RemObjects SDK消息流程-客户端 文档提供的源码范例 有些文档,主要的教程,我们提供了压缩的源码文件,你可以点击文档下面的超链接下载 • RO05 – 如何写 RemObjects SDK服务端 (Delphi Version) • RO06 –如何写 RemObjects SDK 客户端 (Delphi Version) • RO20 – 如何使用DataSnap类写服务端 • RO35 - ROCalc service (by Andrea Raimondi) 有贡献的文章 这些文章不是RemObjects软件公司人员写的,他们很伟大.如果你也许做出奉献请将你的大作发送到support@remobjects.com. 不必担心你的英文语法,我们将修改你的文章并保证不改变你的主题. • RO10 – 不要再如此频繁的调用: 最小服务调用改进执行(by Kevin Powick) • RO13 - Smart Project: 使用RemObjects SDK创建可升级的Smart Services™ (by Nathanial Woolls) • RO33 - SSL/TLS for RemObjects SDK (by Henrick Hellström) • RO34 - I Cannot ROmember (by Brian Moelk) • RO35 - ROCalc service (by Andrea Raimondi) • RO36 - RemObjects SDK 3中的广播事件 (by Derek Davidson) • RO39 – 在一个事务中更新个ClientDataSet (by Erick Sasse) 产品历史和老版本 如果你的应用程序还在使用我们的老版本产品,你能再这里发现有用的信息. 注意: 关于DataSnap的文章也包含再这里,因为他们在Data Abstract产品之前就已经存在了. (see its ROadmap at DA00). • RO19 – DataSnap整合包 • RO20 – 如何使用DataSnap类写服务端 • RO21 – 不使用DataSnapModule 创建简单的DataSnap服务 • RO27 - RemObjects 3.0 SDK预览 • RO31 - RemObjects SDK 3.0代码级别特性 最近更新文章 这里只列出了最主要的更新文章. 次要更新包含修正错别字和语法等.规则很简单,主要更新就是我们觉得有必要重新阅读的更正. • 2007-07-10: RO29 – 使用服务端测试器 新的截屏和对.NET版本的说明. • 2007-07-07: RO21 –不用DataSnapModule创建简单的DataSnap服务端 截屏带有数据并更加整洁. • 2007-06-27: RO11 – 使用RemObjects SDK创建异步客户端 重新整理文章,但是只涵盖了Delphi. 不含.NET. • And so on
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值