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会检查到的主要有下列四种问题 :

  1. Missing Methods
  2. MonoTodo
  3. NotImplementedException
  4. 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

.net 应用迁移到Mono 工具 (Moma)相关推荐

  1. windows安全模式_Winclone 8 for Mac(Windows分区备份迁移和还原工具)

    winclone 8 Mac版是一款专业的boot Camp迁移助手,能够将你的PC移动到你的Mac中,让你实现win系统的迁移.winclone Mac版可以将Bootcamp分区安装的window ...

  2. 各种主流 SQLServer 迁移到 MySQL 工具对比

    今天做ms sql到my sql的转换时,发现如下博文大受裨益,特此转发收藏一下,感谢原著作者的分享和奉献,原文如下: http://www.cnblogs.com/overblue/archive/ ...

  3. 不会编程也能做这么酷炫的视频风格迁移?这个工具冲上Reddit热榜,还能在线试玩...

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 这两天,Reddit上一则关于视频风格迁移的帖子火了,发布仅一天就冲上了机器学习社区的热榜第一. ...

  4. Oracle迁移至PostgreSQL工具之Ora2Pg

    1. 描述 Ora2Pg是一个免费的工具,用于将Oracle数据库迁移到PostgreSQL兼容的模式.它连接您的Oracle数据库,自动扫描并提取它的结构或数据,然后生成可以装载到PostgreSQ ...

  5. oracle迁移到mysql工具_oracle数据库想迁移到mysql上 有什么方法或者工具吗

    Manager进程:需要源端跟目标端同时运行,主要作用是监控管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等 Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量.增量 ...

  6. 电脑文件软件搬家迁移十大工具

    10 大适用于 Windows 的数据迁移软件. 数据迁移至关重要,几乎所有组织都依赖于此.如果您认为数据传输不是一件容易的事,那么数据迁移软件可以帮上忙. 1.奇客电脑迁移 将现有操作系统.软件.文 ...

  7. mysql迁移到mssql工具_mysql转mssql工具-mysql to mssql(迁移mysql至mssql数据库) 4.3 官方版 - 河东下载站...

    mysql转mssql工具是一款功能比较丰富的数据库转换软件,从软件的名字上就能知道他的主要功能就是将mysql数据库的资源文件以及数据库的代码转换到MSSQL数据库上,让用户在修改或者是编译MSSQ ...

  8. Windows分区备份迁移和还原工具:Winclone Pro 8 Mac汉化版

    Winclone Pro 8 Mac汉化版是一款专业的boot Camp迁移助手,能够将你的PC移动到你的Mac中,让你实现win系统的迁移,winclone Mac版可以将Bootcamp分区安装的 ...

  9. oracle异构迁移,异构数据库系统迁移到Oracle 工具 - Oracle SQL Developer

    1.     在Oracle 网站下载  sqldeveloper-3.0.04.34.zip 2.     参考 IBM DB2: You need the binary driver jar fi ...

最新文章

  1. 转:在RHEL5系统中搭建iSCSI存储服务器
  2. mysql二级缓存,mybatis的动态sql和二级缓存
  3. android公网ip,android 获取公网ip 内网ip
  4. vitual dom实现(转)
  5. 学习HTML5+CSS3的第二天
  6. GIS案例练习-----------第九天
  7. python语法学习第一天--变量、运算符、数据类型
  8. java虚拟怎么安装_JAVA虚拟机怎么安装?
  9. 计算机辅助英语听说考试系统,英语听说考试
  10. 【2020-10-28】DS12C887+驱动
  11. Iphone攻与防-一
  12. 电话卡插到终端服务器通话时长,如何降低呼叫中心通话时长而不影响服务质量...
  13. Mac配置VScode
  14. MySQL错误illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)解决方法
  15. ARM开发板移植lsusb命令
  16. C语言期末程序设计(高铁客运订票系统)
  17. HTML标签---列表标签和表格标签
  18. CNN入门实战:我如何把准确率从86% 提高到99%(中)
  19. seo建设者_SEO优化学习笔记
  20. VirtualBox简体中文版下载安装使用图解教程

热门文章

  1. NGINX、PHP-FPM开机自动启动
  2. 2016.5.27 科学————量子力学初识
  3. hdu 1520 树形dp
  4. SQL Server 2005 Express附加(Attach)的数据库为“只读”的解决方法
  5. Apache服务器 配置多个网站解决方案
  6. SVN 问题解决之 The XML response contains invalid XML
  7. 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法
  8. java实现动态上传多个文件并解决文件重名问题
  9. linux下ping不通问题的说明与解决(DNS配置丢失)
  10. BigDecimal空指针异常——个人应用