3

我正在尝试使用 MkBundle 构建这个 C# 程序,以便用户可以在 Linux 上运行它而无需安装 Mono。

但是在尝试使用已构建的程序时,我不断收到错误消息。

重现步骤:

  1. Git克隆这个项目:

https://github.com/nddipiazza/Sharepoint-Exporter

  1. 从中提取 DLL:

https://www.microsoft.com/en-us/download/confirmation.aspx?id=35585 -

  1. 在解决方案资源管理器中,右键单击引用 -> 添加引用 -> 浏览 .NET 程序集 -> 添加 Microsoft sharepoint DLL

    • Microsoft.SharePoint.Client.dll
    • Microsoft.SharePoint.Client.Runtime.dll
  2. 构建应用程序。

(或者只是从这里获取构建的应用程序https://drive.google.com/a/lucidworks.com/file/d/1GPgkmike9KYTDBGLuNj0R_0Q_FDQdhKr/view?usp=sharing

  1. 跑:

mkbundle --simple --static --deps -o ./SpFetcher bin/Release/SpPrefetchIndexBuilder.exe

请注意,捆绑包似乎已成功构建:

ndipiazza@mate:~/lucidworks/Sharepoint-Exporter/SpCrawler (master)*$ mkbundle --simple --static --deps -o ./SpFetcher bin/Release/SpPrefetchIndexBuilder.exe
Using runtime: /usr/bin/mono
     Assembly: /home/ndipiazza/lucidworks/Sharepoint-Exporter/SpCrawler/bin/Release/SpPrefetchIndexBuilder.exe
       Config: /usr/bin/mono
     Assembly: /usr/lib/mono/4.5/mscorlib.dll
     Assembly: /usr/lib/mono/4.5/System.Net.Http.dll
     Assembly: /usr/lib/mono/4.5/System.dll
     Assembly: /usr/lib/mono/4.5/Mono.Security.dll
     Assembly: /usr/lib/mono/4.5/System.Configuration.dll
     Assembly: /usr/lib/mono/4.5/System.Xml.dll
     Assembly: /usr/lib/mono/4.5/System.Security.dll
     Assembly: /usr/lib/mono/4.5/System.Core.dll
     Assembly: /usr/lib/mono/4.5/Mono.Posix.dll
     Assembly: /usr/lib/mono/4.5/System.Web.Extensions.dll
     Assembly: /usr/lib/mono/4.5/System.Web.dll
     Assembly: /usr/lib/mono/4.5/System.Drawing.dll
     Assembly: /usr/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll
     Assembly: /usr/lib/mono/4.5/System.Data.dll
     Assembly: /usr/lib/mono/4.5/System.Numerics.dll
     Assembly: /usr/lib/mono/4.5/System.Transactions.dll
     Assembly: /usr/lib/mono/4.5/Mono.Data.Tds.dll
     Assembly: /usr/lib/mono/4.5/System.EnterpriseServices.dll
     Assembly: /usr/lib/mono/4.5/System.Web.ApplicationServices.dll
     Assembly: /usr/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll
     Assembly: /usr/lib/mono/4.5/Mono.Data.Sqlite.dll
     Assembly: /usr/lib/mono/4.5/System.Web.Services.dll
     Assembly: /usr/lib/mono/4.5/System.DirectoryServices.dll
     Assembly: /usr/lib/mono/4.5/Novell.Directory.Ldap.dll
     Assembly: /usr/lib/mono/4.5/System.Design.dll
     Assembly: /usr/lib/mono/4.5/System.Windows.Forms.dll
     Assembly: /usr/lib/mono/4.5/Accessibility.dll
     Assembly: /usr/lib/mono/4.5/Mono.WebBrowser.dll
     Assembly: /usr/lib/mono/4.5/System.Data.Linq.dll
     Assembly: /usr/lib/mono/4.5/System.Runtime.Serialization.dll
     Assembly: /usr/lib/mono/4.5/System.ServiceModel.Internals.dll
     Assembly: /usr/lib/mono/4.5/System.ServiceModel.dll
     Assembly: /usr/lib/mono/4.5/System.IdentityModel.dll
     Assembly: /usr/lib/mono/4.5/System.Messaging.dll
     Assembly: /usr/lib/mono/4.5/Mono.Messaging.dll
     Assembly: /usr/lib/mono/4.5/System.Configuration.Install.dll
     Assembly: /usr/lib/mono/4.5/System.IdentityModel.Selectors.dll
     Assembly: /usr/lib/mono/4.5/System.ServiceModel.Activation.dll
     Assembly: /home/ndipiazza/lucidworks/Sharepoint-Exporter/SpCrawler/Microsoft.SharePoint.Client.dll
     Assembly: /home/ndipiazza/lucidworks/Sharepoint-Exporter/SpCrawler/Microsoft.SharePoint.Client.Runtime.dll
     Assembly: /usr/lib/mono/4.5/System.Xml.Linq.dll
     Assembly: /usr/lib/mono/4.5/I18N.West.dll
     Assembly: /usr/lib/mono/4.5/I18N.dll
Generated ./SpFetcher
  1. 现在运行./SpFetcher程序

    • 在带有 Mono 的机器上,它工作正常。

    • 在没有单声道的机器上,您会收到以下错误:

    无法识别 URI 前缀。在 System.Net.WebRequest.Create (System.Uri requestUri, System.Boolean useUriBase) [0x000ae] in <50d80b08c1a5449282b22aedf03ce925>:0 在 System.Net.WebRequest.Create (System.String requestUriString) [0x00014] 在 <50d80b08c1a5449282b22aedf03ce 0 在 Microsoft.SharePoint.Client.SPWebRequestExecutor..ctor (Microsoft.SharePoint.Client.ClientRuntimeContext 上下文,System.String requestUrl) [0x0002e] 在:0 在 Microsoft.SharePoint.Client.DefaultWebRequestExecutorFactory.CreateWebRequestExecutor (Microsoft.SharePoint.Client. ClientRuntimeContext 上下文,System.String requestUrl) [0x00021] 在:0 在 Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate () [0x0000d] 在:0 在 Microsoft.SharePoint.Client.ClientContext.EnsureFormDigest () [0x0001f] 在:

预计不会出现该错误。

mkbundle程序不能正常工作吗?

我正在尝试 mkbundle 的 c# 程序:https ://drive.google.com/a/lucidworks.com/file/d/1GPgkmike9KYTDBGLuNj0R_0Q_FDQdhKr/view?usp=sharing

mkbundled 结果:https ://drive.google.com/file/d/13kHG-RxSqfMFlE53wCSe9iqfwOzheKUm/view?usp=sharing

更新:我在 mkbundle 问题跟踪器上创建了一张票。https://bugzilla.xamarin.com/show_bug.cgi?id=60753#bug_status_bottom

4

1 回答 1

0

在我创建的 github 票上得到了一位项目所有者migueldeicaza的回复:

这是由于捆绑的可执行文件中缺少 machine.config 文件造成的。

可能我们应该这样做,以便 mkbundle 也提供 machine.config,同时使用:

mkbundle --simple --deps -o foo a.exe --machine-config /etc/mono/4.5/machine.config 问题是如果没有自动传送 machine.config,开发人员将很难找到交叉编译器正确的路径。

首先看看我创建的那张票上的对话,然后你应该知道要改变什么。就我而言,这有效:

MONO_LOG_MASK=asm MONO_LOG_LEVEL=debug mkbundle --simple --static --deps -o ./SpFetcher --config /etc/mono/config --machine-config /etc/mono/4.5/machine.config bin/Release/SpPrefetchIndexBuilder.exe

终于奏效了。我针对 ubuntumate 16 构建了这个,然后将它移动到没有安装单声道的 ubuntumate 17 机器上,运行它并通过了!

于 2018-01-02T14:44:10.507 回答