Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mkbundle程序集绑定重定向_C#_Mono_Docker_Mkbundle - Fatal编程技术网

C# Mkbundle程序集绑定重定向

C# Mkbundle程序集绑定重定向,c#,mono,docker,mkbundle,C#,Mono,Docker,Mkbundle,我有一个在windows上运行良好的.NET应用程序示例,我的Ubuntu环境使用mono 我正在尝试使用Mkbundle创建一个本机程序集,这样我就可以使用busybox对其进行docker容器化,并使其保持较小的大小,而不是通常庞大的容器 我遇到的问题是Json.net,我想这是由于app.config文件中的程序集绑定重定向造成的,还有其他人遇到过吗 我如何绕过它是为了指定--nodeps标志 mkbundle --nodeps -o console OutsideSourcesAPI.

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

我正在尝试使用Mkbundle创建一个本机程序集,这样我就可以使用busybox对其进行docker容器化,并使其保持较小的大小,而不是通常庞大的容器

我遇到的问题是Json.net,我想这是由于app.config文件中的程序集绑定重定向造成的,还有其他人遇到过吗


我如何绕过它是为了指定--nodeps标志

mkbundle --nodeps -o console OutsideSourcesAPI.exe *.dll
但是,当您运行它时,它可能会给您以下错误

The assembly mscorlib.dll was not found or could not be loaded.

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

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

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

您可以通过在命令行上使用./prefix指定冲突本地部件来解决此问题

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

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

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

提供-skip scan和-nodeps意味着您需要自己提供DLL列表(绕过mkbundle程序集扫描器),以便手动执行此操作或拾取每个程序集,包括.NET framework中的程序集。我不想手工列出每一个程序集,如果我遗漏了一个程序集,就会出现运行时错误。有了它,我也可以绕过app.config程序集绑定问题

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