今天针对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 |
本文探讨了使用C#编译器(csc)创建多文件程序集(Multi-File Assembly)时遇到的问题,特别是在删除一个.NET Module之后运行主程序出现的FileNotFoundException异常及其HRESULT错误代码,引发了对.NET Framework与COM/COM+之间关联性的思考。
1786

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



