首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mkbundle Mono程序集绑定重定向

Mkbundle Mono程序集绑定重定向
EN

Stack Overflow用户
提问于 2015-06-11 02:05:03
回答 3查看 1.2K关注 0票数 4

我有一个样例.NET应用程序,它在windows上运行良好,我的Ubuntu环境使用mono。

我正在尝试使用Mkbundle来创建单个本机程序集,这样我就可以使用busybox将其停靠、容器化,并保持较小的大小,而不是通常巨大、臃肿的容器。

我遇到的问题是Json.net,我认为这是由于app.config文件中的程序集绑定重定向造成的,其他人也遇到过这种情况吗?

代码语言:javascript
复制
<?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

EN

回答 3

Stack Overflow用户

发布于 2015-07-18 06:39:57

我解决这个问题的方法是指定--nodeps标志。

代码语言:javascript
复制
mkbundle --nodeps -o console OutsideSourcesAPI.exe *.dll

但是,当您运行它时,它可能会给您错误,如...

代码语言:javascript
复制
The assembly mscorlib.dll was not found or could not be loaded.

代码语言:javascript
复制
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.

然后,您必须手动指定任何缺少的依赖项(我知道,有点糟糕)。

代码语言:javascript
复制
mkbundle --nodeps -o console OutsideSourcesAPI.exe *.dll mscorlib.dll System.Xml.dll
票数 4
EN

Stack Overflow用户

发布于 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程序集绑定问题。

票数 3
EN

Stack Overflow用户

发布于 2016-04-12 22:36:49

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

代码语言:javascript
复制
mkbundle -z --deps --skip-scan MyApp.exe

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

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

代码语言:javascript
复制
mkbundle -z --deps --skip-scan MyApp.exe ./System.Web.Http.dll

第二个问题似乎在较新版本的mono中得到了解决。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30763986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档