.net 应用迁移到Mono 工具 (Moma)
Mono Migration Analyzer (Moma) 是一个用于开发者使用的MS .net下开发的应用程序迁移到Mono平台的不兼容性检测工具。工具通过分析.dll或者.exe程序集的代码是否符合ECMA CLI,大家都知道符合ECMA CLI标准的.net 程序可以运行于MS .net和Mono平台。这个工具使用Cecil,这是一个用于检测代码是否符合ECMA CLI标准的类库,Mono网站上的小工具还真多。到http://www.mono-project.com/MoMA下载最新版本,解压后运行MoMA.exe,选择一个要分析的程序集,可以选择一组程序集一起分析,在程序集分析过程中,这个工具会分析程序集中的所有方法、属性,事件引用的所有方法,报告方法存在的问题,使用很简单。
Step 1
Step 2
Step 3
Step 4
我用它分析了一下Castle的程序集,发现他还是很多问题。看来迁移到Mono不是一件容易的事情。分析结果附后,有兴趣的你可以自己分析自己的程序集看看。
MoMA Scan Results
Scan time: 2006-11-30 21:27:32
For descriptions of issues and what to do, see http://www.mono-project.com/MoMA_-_Issue_Descriptions.
anrControls.Markdown.NET.dll
No Issues Found
antlr.runtime.dll
No Issues Found
AopAlliance.dll
No Issues Found
Bamboo.Prevalence.Collections.dll
No Issues Found
Bamboo.Prevalence.dll
P/Invokes into native code
Calling Method | P/Invoke Method | External DLL |
Class Bamboo.Prevalence.Implementation.CommandLogWriter: | ||
void Win32HardFlush(FileStream) | int FlushFileBuffers(IntPtr) | KERNEL32.DLL |
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Bamboo.Prevalence.Implementation.CommandLogWriter: | ||
void Win32HardFlush(FileStream) | int Marshal.GetHRForLastWin32Error() |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Bamboo.Prevalence.Implementation.CommandLogWriter: | ||
void Win32HardFlush(FileStream) | int Marshal.GetHRForLastWin32Error() | Not Specified |
Bamboo.Prevalence.Indexing.dll
No Issues Found
Bamboo.Prevalence.Util.dll
No Issues Found
Bamboo.Prevalence.XPath.dll
No Issues Found
Boo.Lang.CodeDom.dll
No Issues Found
Boo.Lang.Compiler.dll
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Boo.Lang.Compiler.Steps.EmitAssembly: | ||
void OnExponentiation(BinaryExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
bool EmitToBoolIfNeeded(Expression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
bool EmitToBoolIfNeeded(Expression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void InvokeRegularMethod(IMethod, MethodInfo, MethodInvocationExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void InvokeSuperMethod(IMethod, MethodInvocationExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void EmitGetTypeFromHandle(Type) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void OnHashLiteralExpression(HashLiteralExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void EmitNormalizedArrayIndex(Expression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void OnExpressionInterpolationExpression(ExpressionInterpolationExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void OnExpressionInterpolationExpression(ExpressionInterpolationExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void OnExpressionInterpolationExpression(ExpressionInterpolationExpression) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void SetProperty(Node, IProperty, Expression, Expression, bool) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void EmitCastIfNeeded(IType, IType) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void EmitCastIfNeeded(IType, IType) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
void EmitUnbox(IType) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Boo.Lang.dll
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Boo.Lang.Runtime.RuntimeServices: | ||
MethodInfo EmitConversionProxy(Type, Type, MethodInfo) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class Boo.Lang.Builtins: | ||
string shellm(string, String[]) | AppDomain AppDomain.CreateDomain(string, Evidence, AppDomainSetup) | Currently it does not allow the setup in the other domain |
Boo.Lang.Interpreter.dll
No Issues Found
Boo.Lang.Parser.dll
No Issues Found
Boo.Lang.Useful.dll
No Issues Found
Boo.Microsoft.Build.Tasks.dll
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Boo.Microsoft.Build.Tasks.Booc: | ||
string GenerateFullPathToTool() | string ToolLocationHelper.GetPathToDotNetFrameworkFile(string, TargetDotNetFrameworkVersion) | |
string GenerateFullPathToTool() | string ToolLocationHelper.GetDotNetFrameworkVersionFolderPrefix(TargetDotNetFrameworkVersion) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Boo.Microsoft.Build.Tasks.Booc: | ||
string GenerateFullPathToTool() | string ToolLocationHelper.GetPathToDotNetFrameworkFile(string, TargetDotNetFrameworkVersion) | Not Specified |
string GenerateFullPathToTool() | string ToolLocationHelper.GetDotNetFrameworkVersionFolderPrefix(TargetDotNetFrameworkVersion) | Not Specified |
Boo.NAnt.Tasks.dll
No Issues Found
Cassini.dll
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Cassini.Connection: | ||
string get_LocalIP() | EndPoint Socket.get_LocalEndPoint() | |
string get_RemoteIP() | EndPoint Socket.get_RemoteEndPoint() |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Cassini.Server: | ||
string GetInstallPathAndConfigureAspNetIfNeeded() | RegistryKey RegistryKey.CreateSubKey(string) | RegistryPermission |
string GetInstallPathAndConfigureAspNetIfNeeded() | RegistryKey RegistryKey.CreateSubKey(string) | RegistryPermission |
IBatisNet.Common.dll
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class IBatisNet.Common.Transaction.TransactionScope: | ||
bool get_IsInTransaction() | bool ContextUtil.get_IsInTransaction() | |
void EnterTransactionContext() | void ServiceConfig..ctor() | |
void EnterTransactionContext() | void ServiceConfig.set_TrackingEnabled(bool) | |
void EnterTransactionContext() | void ServiceConfig.set_TrackingAppName(string) | |
void EnterTransactionContext() | void ServiceConfig.set_TrackingComponentName(string) | |
void EnterTransactionContext() | void ServiceConfig.set_TransactionDescription(string) | |
void EnterTransactionContext() | void ServiceConfig.set_Transaction(TransactionOption) | |
void EnterTransactionContext() | void ServiceConfig.set_TransactionTimeout(int) | |
void EnterTransactionContext() | void ServiceConfig.set_IsolationLevel(TransactionIsolationLevel) | |
void EnterTransactionContext() | void ServiceDomain.Enter(ServiceConfig) | |
void EnterTransactionContext() | Guid ContextUtil.get_ContextId() | |
void Close() | bool ContextUtil.get_IsInTransaction() | |
void Close() | void ContextUtil.EnableCommit() | |
void Close() | void ContextUtil.DisableCommit() | |
void Close() | TransactionStatus ServiceDomain.Leave() |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class IBatisNet.Common.Utilities.Objects.Members.DelegatePropertySetAccessor: | ||
void .ctor(Type, string) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class IBatisNet.Common.Utilities.Objects.Members.EmitPropertyGetAccessor: | ||
void EmitType(ModuleBuilder) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class IBatisNet.Common.Utilities.Objects.Members.DelegatePropertyGetAccessor: | ||
void .ctor(Type, string) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class IBatisNet.Common.Utilities.Objects.Members.EmitPropertySetAccessor: | ||
void EmitType(ModuleBuilder) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class IBatisNet.Common.Transaction.TransactionScope: | ||
bool get_IsInTransaction() | bool ContextUtil.get_IsInTransaction() | Not Specified |
void EnterTransactionContext() | void ServiceConfig..ctor() | Not Specified |
void EnterTransactionContext() | void ServiceDomain.Enter(ServiceConfig) | Not Specified |
void EnterTransactionContext() | Guid ContextUtil.get_ContextId() | Not Specified |
void Close() | bool ContextUtil.get_IsInTransaction() | Not Specified |
void Close() | void ContextUtil.EnableCommit() | Not Specified |
void Close() | void ContextUtil.DisableCommit() | Not Specified |
void Close() | TransactionStatus ServiceDomain.Leave() | Not Specified |
IBatisNet.DataMapper.dll
No Issues Found
Iesi.Collections.dll
No Issues Found
log4net.dll
P/Invokes into native code
Calling Method | P/Invoke Method | External DLL |
Class log4net.Appender.ColoredConsoleAppender: | ||
void Append(LoggingEvent) | IntPtr GetStdHandle(uint) | Kernel32.dll |
void Append(LoggingEvent) | IntPtr GetStdHandle(uint) | Kernel32.dll |
void Append(LoggingEvent) | bool GetConsoleScreenBufferInfo(IntPtr, ColoredConsoleAppender/CONSOLE_SCREEN_BUFFER_INFO&) | Kernel32.dll |
void Append(LoggingEvent) | bool SetConsoleTextAttribute(IntPtr, UInt16) | Kernel32.dll |
void Append(LoggingEvent) | bool SetConsoleTextAttribute(IntPtr, UInt16) | Kernel32.dll |
void ActivateOptions() | int GetConsoleOutputCP() | Kernel32.dll |
Class log4net.Appender.LocalSyslogAppender: | ||
void ActivateOptions() | void openlog(IntPtr, int, LocalSyslogAppender/SyslogFacility) | libc |
void Append(LoggingEvent) | void syslog(int, string) | libc |
void OnClose() | void closelog() | libc |
Class log4net.Appender.NetSendAppender: | ||
void Append(LoggingEvent) | int NetMessageBufferSend(string, string, string, string, int) | netapi32.dll |
Class log4net.Appender.OutputDebugStringAppender: | ||
void Append(LoggingEvent) | void OutputDebugString(string) | Kernel32.dll |
Class log4net.Util.NativeError: | ||
string GetErrorMessage(int) | int FormatMessage(int, IntPtr&, int, int, String&, int, IntPtr) | Kernel32.dll |
Class log4net.Util.WindowsSecurityContext: | ||
WindowsIdentity LogonUser(string, string, string) | bool LogonUser(string, string, string, int, int, IntPtr&) | advapi32.dll |
WindowsIdentity LogonUser(string, string, string) | bool DuplicateToken(IntPtr, int, IntPtr&) | advapi32.dll |
WindowsIdentity LogonUser(string, string, string) | bool CloseHandle(IntPtr) | kernel32.dll |
WindowsIdentity LogonUser(string, string, string) | bool CloseHandle(IntPtr) | kernel32.dll |
WindowsIdentity LogonUser(string, string, string) | bool CloseHandle(IntPtr) | kernel32.dll |
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class log4net.Appender.TelnetAppender/SocketHandler: | ||
void OnConnect(IAsyncResult) | EndPoint Socket.get_RemoteEndPoint() | |
Class log4net.Config.XmlConfigurator: | ||
void Configure(ILoggerRepository, Uri) | void WebRequest.set_Credentials(ICredentials) | |
void Configure(ILoggerRepository, Uri) | WebResponse WebRequest.GetResponse() |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class log4net.Appender.EventLogAppender: | ||
void ActivateOptions() | string EventLog.LogNameFromSourceName(string, string) | Support remote machine |
void ActivateOptions() | void EventLog.DeleteEventSource(string, string) | Support remote machine |
void ActivateOptions() | string EventLog.LogNameFromSourceName(string, string) | Support remote machine |
void ActivateOptions() | string EventLog.LogNameFromSourceName(string, string) | Support remote machine |
NetronGraphLib.dll
P/Invokes into native code
Calling Method | P/Invoke Method | External DLL |
Class Netron.GraphLib.UI.GraphControl: | ||
void SaveImage(string) | bool BitBlt(IntPtr, int, int, int, int, IntPtr, int, int, int) | gdi32.dll |
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Netron.GraphLib.UI.GraphControlDesigner: | ||
void Initialize(IComponent) | void ControlDesigner.Initialize(IComponent) | |
void OnPaintAdornments(PaintEventArgs) | void ControlDesigner.OnPaintAdornments(PaintEventArgs) | |
void .ctor() | void ControlDesigner..ctor() | |
Class Netron.GraphLib.PropertyBag: | ||
Object System.ComponentModel.ICustomTypeDescriptor.GetEditor(Type) | Object TypeDescriptor.GetEditor(Object, Type, bool) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Netron.GraphLib.UI.GraphControlDesigner: | ||
void Initialize(IComponent) | void ControlDesigner.Initialize(IComponent) | Not Specified |
void OnPaintAdornments(PaintEventArgs) | void ControlDesigner.OnPaintAdornments(PaintEventArgs) | Not Specified |
void .ctor() | void ControlDesigner..ctor() | Not Specified |
Class Netron.GraphLib.PropertyBag: | ||
Object System.ComponentModel.ICustomTypeDescriptor.GetEditor(Type) | Object TypeDescriptor.GetEditor(Object, Type, bool) | Not Specified |
NetronMaths.dll
No Issues Found
NHibernate.dll
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class NHibernate.Bytecode.CodeDom.BytecodeProviderImpl/Generator: | ||
IReflectionOptimizer Build(string) | CompilerResults CodeDomProvider.CompileAssemblyFromSource(CompilerParameters, String[]) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class NHibernate.Property.BasicSetter: | ||
void Emit(ILGenerator) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class NHibernate.Bytecode.EmitUtil: | ||
void EmitCreateDelegateInstance(ILGenerator, Type, MethodInfo) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
Class NHibernate.Property.BasicGetter: | ||
void Emit(ILGenerator) | void ILGenerator.EmitCall(OpCode, MethodInfo, Type[]) | vararg methods are not supported |
NLog.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class NLog.Internal.FileAppenders.BaseFileAppender: | ||
FileStream WindowsCreateFile(string, bool) | void FileStream..ctor(SafeFileHandle, FileAccess, int) | |
Class NLog.Win32.Targets.PerfCounterTarget: | ||
void InitializePerfCounter() | PerformanceCounterCategory PerformanceCounterCategory.Create(string, string, PerformanceCounterCategoryType, CounterCreationDataCollection) |
P/Invokes into native code
Calling Method | P/Invoke Method | External DLL |
Class NLog.Internal.FileAppenders.BaseFileAppender: | ||
FileStream WindowsCreateFile(string, bool) | IntPtr CreateFile(string, Win32FileHelper/FileAccess, int, IntPtr, Win32FileHelper/CreationDisposition, Win32FileAttributes, IntPtr) | kernel32.dll |
Class NLog.Internal.Win32FileInfoHelper: | ||
bool GetFileInfo(string, IntPtr, DateTime&, Int64&) | bool GetFileInformationByHandle(IntPtr, Win32FileHelper/BY_HANDLE_FILE_INFORMATION&) | kernel32.dll |
Class NLog.Internal.Win32ThreadIDHelper: | ||
int get_CurrentUnmanagedThreadID() | int GetCurrentThreadId() | kernel32.dll |
void .ctor() | int GetCurrentProcessId() | kernel32.dll |
void .ctor() | uint GetModuleFileName(IntPtr, StringBuilder, int) | kernel32.dll |
Class NLog.LayoutRenderers.QpcLayoutRenderer: | ||
void Append(StringBuilder, LogEventInfo) | bool QueryPerformanceCounter(UInt64&) | kernel32.dll |
void Append(StringBuilder, LogEventInfo) | bool QueryPerformanceFrequency(UInt64&) | kernel32.dll |
Class NLog.Win32.Targets.ColoredConsoleTarget: | ||
void Write(LogEventInfo) | IntPtr GetStdHandle(int) | kernel32.dll |
void Write(LogEventInfo) | bool GetConsoleScreenBufferInfo(IntPtr, ConsoleWin32Api/CONSOLE_SCREEN_BUFFER_INFO&) | kernel32.dll |
void Write(LogEventInfo) | bool GetConsoleScreenBufferInfo(IntPtr, ConsoleWin32Api/CONSOLE_SCREEN_BUFFER_INFO&) | kernel32.dll |
void Write(LogEventInfo) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
void Write(LogEventInfo) | bool FillConsoleOutputAttribute(IntPtr, UInt16, int, ConsoleWin32Api/COORD, UInt32&) | kernel32.dll |
void Write(LogEventInfo) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
void ColorizeEscapeSequences(TextWriter, IntPtr, string, UInt16, UInt16) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
void ColorizeEscapeSequences(TextWriter, IntPtr, string, UInt16, UInt16) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
void ColorizeEscapeSequences(TextWriter, IntPtr, string, UInt16, UInt16) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
void ColorizeEscapeSequences(TextWriter, IntPtr, string, UInt16, UInt16) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
void ColorizeEscapeSequences(TextWriter, IntPtr, string, UInt16, UInt16) | bool SetConsoleTextAttribute(IntPtr, UInt16) | kernel32.dll |
Class NLog.Win32.Targets.OutputDebugStringTarget: | ||
void Write(LogEventInfo) | void OutputDebugString(string) | kernel32.dll |
Class NLog.Win32.ASPHelper: | ||
ASPHelper/ISessionObject GetSessionObject() | int CoGetObjectContext(Guid&, ASPHelper/IObjectContext&) | ole32.dll |
ASPHelper/IApplicationObject GetApplicationObject() | int CoGetObjectContext(Guid&, ASPHelper/IObjectContext&) | ole32.dll |
ASPHelper/IRequest GetRequestObject() | int CoGetObjectContext(Guid&, ASPHelper/IObjectContext&) | ole32.dll |
ASPHelper/IResponse GetResponseObject() | int CoGetObjectContext(Guid&, ASPHelper/IObjectContext&) | ole32.dll |
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class NLog.Internal.FileAppenders.BaseFileAppender: | ||
FileStream WindowsCreateFile(string, bool) | int Marshal.GetHRForLastWin32Error() | |
Class NLog.Internal.FileAppenders.MutexMultiProcessFileAppender: | ||
bool GetFileInfo(DateTime&, Int64&) | SafeFileHandle FileStream.get_SafeFileHandle() | |
bool GetFileInfo(DateTime&, Int64&) | IntPtr SafeHandle.DangerousGetHandle() | |
Class NLog.LayoutRenderers.PerformanceCounterLayoutRenderer: | ||
void InvalidatePerformanceCounter() | void PerformanceCounter.Close() | |
void Append(StringBuilder, LogEventInfo) | Single PerformanceCounter.NextValue() | |
Class NLog.Targets.WebServiceTarget: | ||
void InvokeSoap11(Object[]) | void WebRequest.set_Method(string) | |
void InvokeSoap11(Object[]) | void WebRequest.set_ContentType(string) | |
void InvokeSoap11(Object[]) | WebHeaderCollection WebRequest.get_Headers() | |
void InvokeSoap11(Object[]) | Stream WebRequest.GetRequestStream() | |
void InvokeSoap11(Object[]) | WebResponse WebRequest.GetResponse() | |
void InvokeSoap12(Object[]) | void WebRequest.set_Method(string) | |
void InvokeSoap12(Object[]) | void WebRequest.set_ContentType(string) | |
void InvokeSoap12(Object[]) | Stream WebRequest.GetRequestStream() | |
void InvokeSoap12(Object[]) | WebResponse WebRequest.GetResponse() | |
void InvokeHttpPost(Object[]) | void WebRequest.set_Method(string) | |
void InvokeHttpPost(Object[]) | void WebRequest.set_ContentType(string) | |
void InvokeHttpPost(Object[]) | Stream WebRequest.GetRequestStream() | |
void InvokeHttpPost(Object[]) | WebResponse WebRequest.GetResponse() | |
Class NLog.Win32.Targets.MSMQTarget: | ||
void Write(LogEventInfo) | bool MessageQueue.Exists(string) | |
void Write(LogEventInfo) | MessageQueue MessageQueue.Create(string) | |
void Write(LogEventInfo) | void MessageQueue.Send(Object) | |
Message PrepareMessage(LogEventInfo) | void Message.set_Label(string) | |
Message PrepareMessage(LogEventInfo) | void Message.set_Recoverable(bool) | |
Message PrepareMessage(LogEventInfo) | void Message.set_Priority(MessagePriority) | |
Message PrepareMessage(LogEventInfo) | void Message.set_Body(Object) | |
Message PrepareMessage(LogEventInfo) | Stream Message.get_BodyStream() | |
Class NLog.Win32.Targets.PerfCounterTarget: | ||
void Write(LogEventInfo) | Int64 PerformanceCounter.Increment() | |
void InitializePerfCounter() | void PerformanceCounter.Close() | |
void InitializePerfCounter() | bool PerformanceCounterCategory.Exists(string) | |
void InitializePerfCounter() | bool PerformanceCounterCategory.CounterExists(string, string) | |
void InitializePerfCounter() | bool PerformanceCounterCategory.Exists(string) | |
void InitializePerfCounter() | void PerformanceCounterCategory.Delete(string) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class NLog.Internal.FileAppenders.BaseFileAppender: | ||
FileStream WindowsCreateFile(string, bool) | int Marshal.GetHRForLastWin32Error() | Not Specified |
Class NLog.Internal.FileAppenders.MutexMultiProcessFileAppender: | ||
bool GetFileInfo(DateTime&, Int64&) | IntPtr SafeHandle.DangerousGetHandle() | Not Specified |
Class NLog.LayoutRenderers.PerformanceCounterLayoutRenderer: | ||
void InvalidatePerformanceCounter() | void PerformanceCounter.Close() | Not Specified |
void Append(StringBuilder, LogEventInfo) | Single PerformanceCounter.NextValue() | Not Specified |
Class NLog.Targets.MailTarget: | ||
void SendMessage(MailMessage) | void SmtpClient..ctor(string, int) | Load default settings from configuration. |
void SendMessage(MailMessage) | void SmtpClient.Send(MailMessage) | Need to work on message attachments. |
Class NLog.Win32.Targets.EventLogTarget: | ||
void UpdateEventLogSource() | bool EventLog.SourceExists(string, string) | Support remote machines |
void UpdateEventLogSource() | string EventLog.LogNameFromSourceName(string, string) | Support remote machine |
void UpdateEventLogSource() | void EventLog.DeleteEventSource(string, string) | Support remote machine |
void UpdateEventLogSource() | void EventLog.CreateEventSource(EventSourceCreationData) | Support remote machine |
void UpdateEventLogSource() | void EventLog.CreateEventSource(EventSourceCreationData) | Support remote machine |
Class NLog.Win32.Targets.MSMQTarget: | ||
void Write(LogEventInfo) | bool MessageQueue.Exists(string) | Not Specified |
void Write(LogEventInfo) | MessageQueue MessageQueue.Create(string) | Not Specified |
void Write(LogEventInfo) | void MessageQueue..ctor(string) | Not Specified |
void Write(LogEventInfo) | void MessageQueue.Send(Object) | Not Specified |
Message PrepareMessage(LogEventInfo) | void Message..ctor() | Not Specified |
Message PrepareMessage(LogEventInfo) | void Message.set_Label(string) | Not Specified |
Message PrepareMessage(LogEventInfo) | void Message.set_Recoverable(bool) | Not Specified |
Message PrepareMessage(LogEventInfo) | void Message.set_Priority(MessagePriority) | Not Specified |
Message PrepareMessage(LogEventInfo) | void Message.set_Body(Object) | Not Specified |
Message PrepareMessage(LogEventInfo) | Stream Message.get_BodyStream() | Not Specified |
Class NLog.Win32.Targets.PerfCounterTarget: | ||
void Write(LogEventInfo) | Int64 PerformanceCounter.Increment() | Not Specified |
void InitializePerfCounter() | void PerformanceCounter.Close() | Not Specified |
void InitializePerfCounter() | bool PerformanceCounterCategory.Exists(string) | Not Specified |
void InitializePerfCounter() | bool PerformanceCounterCategory.CounterExists(string, string) | Not Specified |
void InitializePerfCounter() | bool PerformanceCounterCategory.Exists(string) | Not Specified |
void InitializePerfCounter() | void PerformanceCounterCategory.Delete(string) | Not Specified |
Nullables.dll
No Issues Found
Nullables.NHibernate.dll
No Issues Found
nunit.framework.dll
No Issues Found
NVelocity.dll
No Issues Found
NVelocity.Tests.dll
No Issues Found
Castle.Facilities.AutomaticTransactionManagement.dll
No Issues Found
AspectSharp.dll
No Issues Found
AspectSharp.Lang.dll
P/Invokes into native code
Calling Method | P/Invoke Method | External DLL |
Class AspectSharp.Lang.GacHelper: | ||
IAssemblyEnum CreateGACEnum() | void CreateAssemblyEnum(IAssemblyEnum&, IntPtr, IAssemblyName, ASM_CACHE_FLAGS, IntPtr) | fusion.dll |
Castle.ActiveRecord.dll
No Issues Found
Castle.Components.Binder.dll
No Issues Found
Castle.Components.Common.EmailSender.dll
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.Components.Common.EmailSender.Smtp.SmtpSender: | ||
void set_Timeout(int) | void SmtpClient.set_Timeout(int) | Check to make sure an email is not being sent. |
void Send(Message) | void SmtpClient.SendAsync(MailMessage, Object) | Not Specified |
void Send(Message) | void SmtpClient.Send(MailMessage) | Need to work on message attachments. |
MailMessage CreateMailMessage(Message) | void Attachment..ctor(Stream, string) | Not Specified |
MailMessage CreateMailMessage(Message) | void Attachment..ctor(string, string) | Not Specified |
void ConfigureSender(Message) | void SmtpClient.set_Port(int) | Check to make sure an email is not being sent. |
Castle.Components.Common.TemplateEngine.dll
No Issues Found
Castle.Components.Common.TemplateEngine.NVelocityTemplateEngine.dll
No Issues Found
Castle.Components.Winforms.AssemblyResolver.dll
No Issues Found
Castle.Core.dll
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.Core.Logging.DiagnosticsLogger: | ||
void .ctor(string, string, string) | bool EventLog.SourceExists(string, string) | Support remote machines |
void .ctor(string, string, string) | void EventLog.CreateEventSource(EventSourceCreationData) | Support remote machine |
Castle.DynamicProxy2.dll
No Issues Found
Castle.DynamicProxy.dll
No Issues Found
Castle.Facilities.ActiveRecordIntegration.dll
No Issues Found
Castle.Facilities.AspectSharp.dll
No Issues Found
Castle.MonoRail.TestSupport.dll
No Issues Found
Castle.Facilities.BatchRegistration.dll
No Issues Found
Castle.Facilities.Cache.dll
No Issues Found
Castle.Facilities.DynamicLoader.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class Castle.Facilities.DynamicLoader.DynamicLoaderFacility: | ||
AppDomain CreateAppDomain(IConfiguration) | void AppDomainSetup.set_DisallowApplicationBaseProbing(bool) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.Facilities.DynamicLoader.DynamicLoaderFacility: | ||
AppDomain CreateAppDomain(IConfiguration) | AppDomain AppDomain.CreateDomain(string, Evidence, AppDomainSetup) | Currently it does not allow the setup in the other domain |
Castle.Facilities.IBatisNetIntegration.dll
No Issues Found
Castle.Facilities.Logging.dll
No Issues Found
Castle.Facilities.NHibernateIntegration.dll
No Issues Found
Castle.Facilities.Prevalence.dll
No Issues Found
Castle.MicroKernel.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class Castle.Facilities.Remoting.RemotingFacility: | ||
void SetUpRemotingConfiguration() | void RemotingConfiguration.Configure(string, bool) |
Castle.MonoRail.ActiveRecordScaffold.dll
No Issues Found
Castle.MonoRail.ActiveRecordSupport.dll
No Issues Found
Castle.MonoRail.Framework.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class Castle.MonoRail.Framework.Views.Aspx.WebFormsViewEngine/ExecutePageProvider: | ||
Page ExecutePage(IRailsEngineContext) | void HttpServerUtility.Execute(string, bool) |
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Castle.MonoRail.Framework.CacheAttribute: | ||
void Castle.MonoRail.Framework.ICachePolicyConfigurer.Configure(HttpCachePolicy) | void HttpCachePolicy.SetValidUntilExpires(bool) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.MonoRail.Framework.CacheAttribute: | ||
void Castle.MonoRail.Framework.ICachePolicyConfigurer.Configure(HttpCachePolicy) | void HttpCachePolicy.SetValidUntilExpires(bool) | Not Specified |
Castle.MonoRail.Framework.Views.CompositeView.dll
No Issues Found
Castle.MonoRail.Framework.Views.NVelocity.dll
No Issues Found
Castle.MonoRail.Generator.exe
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Castle.MonoRail.Generator.Generators.ControllerGenerator: | ||
void GenerateController(CodeDomProvider, string, string, string, string, String[], TextWriter) | void CodeDomProvider.GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions) | |
void GenerateTestCase(CodeDomProvider, string, string, string, string, String[], TextWriter) | void CodeDomProvider.GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions) |
Castle.Windsor.dll
No Issues Found
AspectSharp.dll
No Issues Found
AspectSharp.Lang.dll
P/Invokes into native code
Calling Method | P/Invoke Method | External DLL |
Class AspectSharp.Lang.GacHelper: | ||
IAssemblyEnum CreateGACEnum() | void CreateAssemblyEnum(IAssemblyEnum&, IntPtr, IAssemblyName, ASM_CACHE_FLAGS, IntPtr) | fusion.dll |
Castle.ActiveRecord.dll
No Issues Found
Castle.Components.Binder.dll
No Issues Found
Castle.Components.Common.EmailSender.dll
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.Components.Common.EmailSender.Smtp.SmtpSender: | ||
void set_Timeout(int) | void SmtpClient.set_Timeout(int) | Check to make sure an email is not being sent. |
void Send(Message) | void SmtpClient.SendAsync(MailMessage, Object) | Not Specified |
void Send(Message) | void SmtpClient.Send(MailMessage) | Need to work on message attachments. |
MailMessage CreateMailMessage(Message) | void Attachment..ctor(Stream, string) | Not Specified |
MailMessage CreateMailMessage(Message) | void Attachment..ctor(string, string) | Not Specified |
void ConfigureSender(Message) | void SmtpClient.set_Port(int) | Check to make sure an email is not being sent. |
Castle.Components.Common.TemplateEngine.dll
No Issues Found
Castle.Components.Common.TemplateEngine.NVelocityTemplateEngine.dll
No Issues Found
Castle.Components.Winforms.AssemblyResolver.dll
No Issues Found
Castle.Core.dll
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.Core.Logging.DiagnosticsLogger: | ||
void .ctor(string, string, string) | bool EventLog.SourceExists(string, string) | Support remote machines |
void .ctor(string, string, string) | void EventLog.CreateEventSource(EventSourceCreationData) | Support remote machine |
Castle.DynamicProxy2.dll
No Issues Found
Castle.DynamicProxy.dll
No Issues Found
Castle.Facilities.ActiveRecordIntegration.dll
No Issues Found
Castle.Facilities.AspectSharp.dll
No Issues Found
Castle.Facilities.AutomaticTransactionManagement.dll
No Issues Found
Castle.Facilities.BatchRegistration.dll
No Issues Found
Castle.Facilities.Cache.dll
No Issues Found
Castle.Facilities.DynamicLoader.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class Castle.Facilities.DynamicLoader.DynamicLoaderFacility: | ||
AppDomain CreateAppDomain(IConfiguration) | void AppDomainSetup.set_DisallowApplicationBaseProbing(bool) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.Facilities.DynamicLoader.DynamicLoaderFacility: | ||
AppDomain CreateAppDomain(IConfiguration) | AppDomain AppDomain.CreateDomain(string, Evidence, AppDomainSetup) | Currently it does not allow the setup in the other domain |
Castle.Facilities.IBatisNetIntegration.dll
No Issues Found
Castle.Facilities.Logging.dll
No Issues Found
Castle.Facilities.NHibernateIntegration.dll
No Issues Found
Castle.Facilities.Prevalence.dll
No Issues Found
Castle.MicroKernel.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class Castle.Facilities.Remoting.RemotingFacility: | ||
void SetUpRemotingConfiguration() | void RemotingConfiguration.Configure(string, bool) |
Castle.MonoRail.ActiveRecordScaffold.dll
No Issues Found
Castle.MonoRail.ActiveRecordSupport.dll
No Issues Found
Castle.MonoRail.Framework.dll
Methods missing from Mono
Calling Method | Method not yet in Mono | |
Class Castle.MonoRail.Framework.Views.Aspx.WebFormsViewEngine/ExecutePageProvider: | ||
Page ExecutePage(IRailsEngineContext) | void HttpServerUtility.Execute(string, bool) |
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Castle.MonoRail.Framework.CacheAttribute: | ||
void Castle.MonoRail.Framework.ICachePolicyConfigurer.Configure(HttpCachePolicy) | void HttpCachePolicy.SetValidUntilExpires(bool) |
Methods called marked with [MonoTodo]
Calling Method | Method with [MonoTodo] | Reason |
Class Castle.MonoRail.Framework.CacheAttribute: | ||
void Castle.MonoRail.Framework.ICachePolicyConfigurer.Configure(HttpCachePolicy) | void HttpCachePolicy.SetValidUntilExpires(bool) | Not Specified |
Castle.MonoRail.Framework.Views.CompositeView.dll
No Issues Found
Castle.MonoRail.Framework.Views.NVelocity.dll
No Issues Found
Castle.MonoRail.Generator.exe
Methods called that throw NotImplementedException
Calling Method | Mono method that throws NotImplementedException | |
Class Castle.MonoRail.Generator.Generators.ControllerGenerator: | ||
void GenerateController(CodeDomProvider, string, string, string, string, String[], TextWriter) | void CodeDomProvider.GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions) | |
void GenerateTestCase(CodeDomProvider, string, string, string, string, String[], TextWriter) | void CodeDomProvider.GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions) |
Castle.MonoRail.TestSupport.dll
No Issues Found
Castle.MonoRail.Views.Brail.dll
No Issues Found
Castle.MonoRail.WindsorExtension.dll
No Issues Found
Castle.Services.Logging.Log4netIntegration.dll
No Issues Found
Castle.Services.Logging.NLogIntegration.dll
No Issues Found
Castle.Services.Transaction.dll
No Issues Found
影响迁移的四大问题
MoMA会检查到的主要有下列四种问题 :
- Missing Methods
- MonoTodo
- NotImplementedException
- P/Invokes
Missing Methods
该问题是因为使用的方法在Mono中尚未实现。依照编译程序的不同可能会看到不同的错误信息,如果用Mono编译的话,在编译时就会报错,可看到下列的讯息:
myfile.cs(22,16): error CS0117: 'xxxxxxxxxxxxxxxxx' does not contain a definition for 'xxxxxxxxxxxxxxx'
而如果用微软编译程序编译的话,则必须执行到该方法处才会跳出MissingMethodException的例外:
System.MissingMethodException: Method not found: xxxxxxxxxxxxxxxxxxx
MonoTodo
该问题是因为应用程序中存在标记有MonoTodo的方法。这标记是用来提醒开发人员尚须处理的地方,通常这代表着方法尚未实现完全,或是实现完后开发者忘了将该标记移除。
NotImplementedException
该问题是因为应用程序中存在会丢出NotImplementedException的方法。
P/Invokes
该问题是因为应用程序中存在着平台调用。平台调用通常是用来调用非托管的方法,尤其是平台本身提供的方法。
命令行执行
MoMa从1.9版开始就已支持命令行执行的功能。
若要用命令行设定要检查的组件并启动MoMa,可以像下面这样:
MoMA C:\app\myapp.exe |
若要用设定加入多个要检查的组件并启动MoMa,可以像下面这样:
MoMA C:\app\myapp.exe C:\app\myapp.dll C:\app\myapp2.dll |
若不想带出MoMa界面,可通过--nogui设定并指定组件的位置,像是:
MoMA --nogui C:\app\myapp.exe |
执行完后,在命令提示字符看不到任何信息,须自行开启报表查看,其报表会存放在MoMa目录下的Reports目录内。若要自行指定报表位置,可透通过 --out来设定,并指派输出的报表文件位置,像是:
MoMA --nogui --out C:\app\momareport\report.html C:\app\myapp.exe |
欢迎大家扫描下面二维码成为我的客户,扶你上云