今天针对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 |
本文记录了使用CSC编译器创建multi-file assembly过程中遇到的问题,当删除了一个.netmodule文件后,执行程序出现FileNotFoundException异常。文章探讨了.NET Framework与COM之间的关联,并提供了HRESULT与.NET异常对照表。
1789

被折叠的 条评论
为什么被折叠?



