4

我有一个在 Windows 上运行良好的示例 .NET 应用程序,我的 Ubuntu 环境使用单声道。

我正在尝试使用 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 都会产生以下错误

在此处输入图像描述

4

3 回答 3

4

我如何解决它是指定 --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
于 2015-07-17T22:39:56.700 回答
3

答案有点晚,但有同样的问题,仅仅这样做还不够,因为我想静态链接 Mono 运行时(使用 --static 选项)。这是由于缺少 --skip-scan 和/或 --nodeps 缺少的 GAC 程序集,包括它们可能具有的任何传递依赖项。当然这只会影响没有安装 Mono 的机器(如果机器上有 Mono 的 GAC,它仍然会使用它),这也使得测试变得更加困难。

提供 -skip-scan 和 -nodeps 意味着您需要自己提供 DLL 列表(绕过 mkbundle 程序集扫描程序),允许您手动执行此操作或编写自己的扫描程序,我这样做会获取每个程序集,包括 . NET 框架。我不想手动列出每一个程序集,如果我错过了一个程序集,就会出现运行时错误。有了这个,我也能够解决 app.config 程序集绑定问题。

于 2016-09-04T01:55:50.873 回答
2

添加 --skip-scan 标志似乎可以解决问题,而无需求助于 --nodeps 和依赖 dll 的手动列表。

mkbundle -z --deps --skip-scan MyApp.exe

请注意,从单声道 4.2.3 开始,mkbundle 似乎更喜欢单声道分发中的程序集,而不是本地文件夹中的程序集。如果本地程序集和框架程序集之间存在命名冲突(可能是 System.Web.Http.dll 候选),这可能会导致问题。

您可以通过在命令行上使用 ./ 前缀指定冲突的本地程序集来解决此问题

mkbundle -z --deps --skip-scan MyApp.exe ./System.Web.Http.dll

第二个问题似乎在新版本的单声道中得到了解决。

于 2016-04-12T14:36:49.033 回答