我的问题几乎与 Embedding DLLs in a compiled executable 相似,但是提供的非常好的答案here会失去与mono运行时的兼容性,尽管它可以在Windows上运行。
那么我如何使用Fody
(Costura
)并保持单声道兼容性。他们在https://github.com/Fody/Costura#contents的文档上写着:
CosturaUtility是一个允许您初始化的类 Costura系统在您自己的代码中手动。这主要是针对场景的 模块初始化程序不起作用的地方,例如库和Mono。
要使用,请在代码中的某处调用CosturaUtility.Initialize() 尽可能早。
class Program { static Program() { CosturaUtility.Initialize(); } static void Main(string[] args) { ... } }
但即使在手动初始化ConturaUtility
之后,它也不支持单声道运行时。
我不认为错误日志是相关的,但这里是:
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'
答案 0 :(得分:0)
在程序的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);
}
};