如何判断 Mono/Gtk# 应用程序依赖的 DLL (Windows)
How to tell what DLL's a Mono/Gtk# app depends on (Windows)
我在 windows 上有一个简单的 gtk# mono 应用程序 运行。它在我安装了 Mono、.NET 和 GTK 的 PC 上运行良好。但是如果我把exe给朋友,显然是行不通的。
Mono 的 mkbundle 工具似乎无法在 windows 上正常工作(我试过)。所以我已经恢复到快速解决方案,即在将它提供给朋友时将必要的 DLL 包含在 exe 中。
但我不知道需要什么。到目前为止,我的猜测都是错误的。我尝试包括 mkbundle 想要嵌入的所有内容,但这没有用。有什么工具可以告诉我我需要什么吗?
创建一个新的控制台项目(示例名称 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"
这使用反射来确定可执行文件引用的库。如果您有多个文件是可执行文件的一部分,您可能需要为每个文件 运行 这样做,或者您可以将其修改为递归的,我将把它作为练习留给您。
如果您要分发使用 Gtk#/Mono 制作的程序,则需要您的朋友安装 Gtk# for Windows。安装完成后,只需复制并执行exe,就大功告成了。
我在 windows 上有一个简单的 gtk# mono 应用程序 运行。它在我安装了 Mono、.NET 和 GTK 的 PC 上运行良好。但是如果我把exe给朋友,显然是行不通的。
Mono 的 mkbundle 工具似乎无法在 windows 上正常工作(我试过)。所以我已经恢复到快速解决方案,即在将它提供给朋友时将必要的 DLL 包含在 exe 中。
但我不知道需要什么。到目前为止,我的猜测都是错误的。我尝试包括 mkbundle 想要嵌入的所有内容,但这没有用。有什么工具可以告诉我我需要什么吗?
创建一个新的控制台项目(示例名称 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"
这使用反射来确定可执行文件引用的库。如果您有多个文件是可执行文件的一部分,您可能需要为每个文件 运行 这样做,或者您可以将其修改为递归的,我将把它作为练习留给您。
如果您要分发使用 Gtk#/Mono 制作的程序,则需要您的朋友安装 Gtk# for Windows。安装完成后,只需复制并执行exe,就大功告成了。