C# 利用Fody的Mono支持将DLL嵌入exe

C# 利用Fody的Mono支持将DLL嵌入exe,c#,.net,winforms,mono,fody,C#,.net,Winforms,Mono,Fody,我的问题几乎与之相似,但提供的非常好的答案放松了与mono运行时的兼容性,尽管它在windows上工作 那么我如何使用Fody(Costura)并保持单声道兼容性呢。他们的文件如下: CosturaUtility是一个类,它允许您初始化 在您自己的代码中手动创建Costura系统。这主要用于场景 模块初始值设定项不起作用的地方,例如库和Mono 要使用,请在代码中的某个地方调用CosturaUtility.Initialize(),如下所示 尽早 class Program { stat

我的问题几乎与之相似,但提供的非常好的答案放松了与mono运行时的兼容性,尽管它在windows上工作

那么我如何使用Fody(
Costura
)并保持单声道兼容性呢。他们的文件如下:

CosturaUtility是一个类,它允许您初始化 在您自己的代码中手动创建Costura系统。这主要用于场景 模块初始值设定项不起作用的地方,例如库和Mono

要使用,请在代码中的某个地方调用CosturaUtility.Initialize(),如下所示 尽早

class Program {
    static Program() {
        CosturaUtility.Initialize();
    }

    static void Main(string[] args) { ... }
}
但即使在手动初始化
ConturaUtility
之后,它也不支持mono运行时

我认为错误日志与此无关,但它是:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'CommandLine, Version=2.2.1.0, Culture=neutral, PublicKeyToken=de6f01bd326f8c32' or one of its dependencies.
File name: 'CommandLine, Version=2.2.1.0, Culture=neutral, PublicKeyToken=de6f01bd326f8c32'
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: Could not load file or assembly 'CommandLine, Version=2.2.1.0, Culture=neutral, PublicKeyToken=de6f01bd326f8c32' or one of its dependencies.
File name: 'CommandLine, Version=2.2.1.0, Culture=neutral, PublicKeyToken=de6f01bd326f8c32'

在程序的Main()开头使用以下代码:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
   String resourceName = "AssemblyLoadingAndReflection." +
      new AssemblyName(args.Name).Name + ".dll";
   using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
      Byte[] assemblyData = new Byte[stream.Length];
      stream.Read(assemblyData, 0, assemblyData.Length);
      return Assembly.Load(assemblyData);
   }
};
参考: