今天 针对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 |