如何判断一个Mono / Gtk#app依赖的DLL(Windows)

时间:2015-05-06 20:24:29

标签: c# windows mono gtk#

我在Windows上运行了一个简单的gtk #monomon应用程序。它在安装了Mono,.NET和GTK的PC上运行良好。但如果我把这个exe给了朋友,它显然不起作用。

Mono的mkbundle工具似乎没有在没有大量麻烦的情况下在Windows上运行(我已经尝试过)。因此,当我将它提供给朋友时,我已经恢复了快速解决方案,只需将必要的DLL包含在exe中。

但我不知道需要什么。到目前为止,我的猜测是错误的。我尝试了包含mkbundle想要嵌入的所有内容,但这不起作用。是否有一些工具可以告诉我我需要什么?

2 个答案:

答案 0 :(得分:1)

创建一个新的控制台项目(示例名称InspectRefAssm),将其粘贴到其中:

using System;
using System.Reflection;

namespace InspectRefAssm
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1 || string.IsNullOrEmpty(args[0]))
            {
                Console.WriteLine("This program requires an argument to the path of the executable.");
                Console.WriteLine("Example:");
                Console.WriteLine(Path.GetFileName(Assembly.GetEntryAssembly().Location) + @" c:\Path\To\Executable.exe");
                Console.ReadKey(true);
                return;
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("File not found.");
                Console.ReadKey(true);
                return;
            }

            Assembly asm = Assembly.LoadFile(args[0]);

            foreach (AssemblyName asmName in asm.GetReferencedAssemblies())
            {
                Console.WriteLine(asmName.FullName);
            }

            Console.ReadKey(true);
        }
    }
}

编译它,然后用:

调用它

InspectRefAssm.exe&#34; Path \ To \ YourExecutable.exe&#34;

这使用反射来确定可执行文件引用的库。如果您有多个文件属于可执行文件,您可能需要为每个文件运行此文件,或者您可以将其修改为递归文件,我将把它作为练习留给您。

答案 1 :(得分:1)

如果您要发布使用Gtk#/ Mono制作的程序,则需要您的朋友安装Gtk# for Windows。安装完成后,只需复制并执行exe,即可​​完成。