【问题标题】:How to tell what DLL's a Mono/Gtk# app depends on (Windows)如何判断 DLL 是 Mono/Gtk# 应用程序所依赖的 (Windows)
【发布时间】:2015-05-06 20:24:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# windows mono gtk#


    【解决方案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 "Path\To\YourExecutable.exe"

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

    【讨论】:

    • 这个应用程序很好用,我在应用程序中包含了 DLL 并把它交给了我的朋友。然而该应用程序仍然无法正常工作。他的计算机上有.NET。他也需要单声道吗?
    • 我不认为这是正确的。 mono-project.com/docs/gui/gtksharp/beginners-guide 这里说 Gtk# 需要 Mono 是一个常见的误解。可悲的是它仍然没有解决我的问题。
    【解决方案2】:

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

    【讨论】:

    • 是的,我把它整理好了,谢谢你的帮助,虽然这不是我问的技术问题。我给了你一个赞成票。
    • 这可能是因为您的问题比它需要的更复杂...我的意思是,如果您使用 Gtk#,请安装 Gtk#。 ;-) 这不仅仅是 DLL 的问题,因为您需要 C# 的 DLL,然后是本机的 Gtk 的。所以这不是一件简单的事情。
    • 公平点。当引用的程序集不能自行工作时,我意识到了这一点。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多