卸载并重新安装单声道后,我的winforms应用程序将无法启动

时间:2013-12-21 15:25:26

标签: c# winforms visual-studio-2012 mono

我有这个测试程序

namespace MonoWindowsFormsTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

使用.NET 4.5.1和VS2012在Windows 8.1上构建

我打开我的cmd,将目录更改为我的调试文件夹,然后运行此命令:

mono myapp.exe > error.txt

它什么都没给我。它不启动我的程序,error.txt为空。

我在PATH中有这个:

C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Program Files (x86)\Mono-3.2.3\bin

使用mono 3.3.0运行。

实际上这在10分钟前有效,但我决定将Mono更新到3.2.4,但看起来Mono 3.2.4仅适用于OS X,因为mono项目下载部分的更新链接指向3.2 .3选择Windows平台时。但无论如何我继续安装下载的单声道包。

因为重新安装,有什么我忘记做的吗?安装一些东西,写一些配置?

我尝试构建并运行这个简单的控制台应用程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MonoConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hellllo");
            Console.ReadKey();
        }
    }
}

当我通过单声道运行时,它运行得很好。

1 个答案:

答案 0 :(得分:0)

这是一个很难的,但我突然想起来了。上次我在Windows上安装Mono时,我更改了C:\ Program Files(x86)\ Mono-3.2.3 \ etc \ mono \ config文件来保存:

<configuration>
    <dllmap dll="i:cygwin1.dll" target="libc.so.6" os="!windows" />
    <dllmap dll="libc" target="libc.so.6" os="!windows"/>
    <dllmap dll="intl" target="libc.so.6" os="!windows"/>
    <dllmap dll="intl" name="bind_textdomain_codeset" target="libc.so.6" os="solaris"/>
    <dllmap dll="libintl" name="bind_textdomain_codeset" target="libc.so.6" os="solaris"/>
    <dllmap dll="libintl" target="libc.so.6" os="!windows"/>
    <dllmap dll="i:libxslt.dll" target="libxslt.so" os="!windows"/>
    <dllmap dll="i:odbc32.dll" target="libodbc.so" os="!windows"/>
    <dllmap dll="i:odbc32.dll" target="libiodbc.dylib" os="osx"/>
    <dllmap dll="oci" target="libclntsh.so" os="!windows"/>
    <dllmap dll="db2cli" target="libdb2_36.so" os="!windows"/>
    <dllmap dll="MonoPosixHelper" target="libMonoPosixHelper.so" os="!windows" />
    <dllmap dll="i:msvcrt" target="libc.so.6" os="!windows"/>
    <dllmap dll="i:msvcrt.dll" target="libc.so.6" os="!windows"/>
    <dllmap dll="sqlite" target="libsqlite.so.0" os="!windows"/>
    <dllmap dll="sqlite3" target="libsqlite3.so.0" os="!windows"/>
    <dllmap dll="libX11" target="libX11.so" os="!windows" />
    <dllmap dll="libcairo-2.dll" target="libcairo.so.2" os="!windows"/>
    <dllmap dll="libcairo-2.dll" target="libcairo.2.dylib" os="osx"/>
    <dllmap dll="libcups" target="libcups.so.2" os="!windows"/>
    <dllmap dll="libcups" target="libcups.dylib" os="osx"/>
    <dllmap dll="i:kernel32.dll">
        <dllentry dll="__Internal" name="CopyMemory" target="mono_win32_compat_CopyMemory"/>
        <dllentry dll="__Internal" name="FillMemory" target="mono_win32_compat_FillMemory"/>
        <dllentry dll="__Internal" name="MoveMemory" target="mono_win32_compat_MoveMemory"/>
        <dllentry dll="__Internal" name="ZeroMemory" target="mono_win32_compat_ZeroMemory"/>
    </dllmap>
    <dllmap dll="gdiplus" target="@prefix@/lib/libgdiplus@libsuffix@" os="!windows"/>
    <dllmap dll="gdiplus.dll" target="@prefix@/lib/libgdiplus@libsuffix@"  os="!windows"/>
    <dllmap dll="gtkhtml-3.0" target="libgtkhtml-3.8-15.dll"/>
</configuration>

我对这两行进行了更改

<dllmap dll="gdiplus" target="@prefix@/lib/libgdiplus@libsuffix@" os="!windows"/>
<dllmap dll="gdiplus.dll" target="@prefix@/lib/libgdiplus@libsuffix@"  os="!windows"/>

根据以下链接添加 os =“!windows”https://github.com/mono/mono/pull/587/files。当我通过mono运行我的Windows窗体应用程序时,它会立即启动。