我有一个样例.NET应用程序,它在windows上运行良好,我的Ubuntu环境使用mono。
我正在尝试使用Mkbundle来创建单个本机程序集,这样我就可以使用busybox将其停靠、容器化,并保持较小的大小,而不是通常巨大、臃肿的容器。
我遇到的问题是Json.net,我认为这是由于app.config文件中的程序集绑定重定向造成的,其他人也遇到过这种情况吗?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" /></startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
并且它会产生以下错误,无论是否使用--static

发布于 2015-07-18 06:39:57
我解决这个问题的方法是指定--nodeps标志。
mkbundle --nodeps -o console OutsideSourcesAPI.exe *.dll但是,当您运行它时,它可能会给您错误,如...
The assembly mscorlib.dll was not found or could not be loaded.或
Unhandled Exception: System.IO.FileNotFoundException:
Could not load file or assembly 'System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes' or one of its dependencies.然后,您必须手动指定任何缺少的依赖项(我知道,有点糟糕)。
mkbundle --nodeps -o console OutsideSourcesAPI.exe *.dll mscorlib.dll System.Xml.dll发布于 2016-09-04 09:55:51
回答有点晚,但有相同的问题,仅仅这样做是不够的,因为我想静态地链接Mono运行时(使用--static选项)。这是由于缺少GAC程序集,--跳过扫描和/或--nodeps缺少,包括它们可能具有的任何传递依赖项。当然,这只影响没有安装Mono的机器(如果机器上有Mono的GAC,它仍然使用Mono的GAC),这也使得测试变得更加困难。
including skip-scan和-nodeps意味着您需要自己提供DLL列表(绕过mkbundle程序集扫描程序),允许您手动执行此操作,或者使用write your own scanner which I did拾取每个单独的程序集,包括.NET框架中的程序集。我不想手动列出每一个程序集,如果我错过了一个,就会出现运行时错误。有了这个,我还可以绕过app.config程序集绑定问题。
发布于 2016-04-12 22:36:49
添加--skip-scan标志似乎可以解决这个问题,而不必求助于--nodeps和手动的依赖项dll列表。
mkbundle -z --deps --skip-scan MyApp.exe请注意,从mono 4.2.3开始,mkbundle似乎更喜欢mono发行版中的程序集,而不是本地文件夹中的程序集。如果在本地程序集和框架程序集之间存在命名冲突,这可能会导致问题(System.Web.Http.dll可能是候选程序集)。
可以通过在命令行上使用./前缀指定冲突的本地程序集来解决此问题
mkbundle -z --deps --skip-scan MyApp.exe ./System.Web.Http.dll第二个问题似乎在较新版本的mono中得到了解决。
https://stackoverflow.com/questions/30763986
复制相似问题