git - 在 Ubuntu 上使用 Jenkins 构建 .net 应用程序,无法加载类型?

标签 git ubuntu jenkins msbuild mono

我最近制作了自己的 ubuntu/jenkins/git/sonar buildserver,并尝试用它构建我的 .net 控制台应用程序。

它似乎构建得非常好,我使用单声道从 Jenkins 运行它:

Thermostate setting through Google Calendar API
====================
ERROR: Could not load type 'Google.Apis.Auth.OAuth2.BearerToken+AuthorizationHeaderAccessMethod' from assembly 'Google.Apis.Auth, Version=1.9.0.26011, Culture=neutral, PublicKeyToken=null'.

我启用了 nuget,它告诉我
Restoring NuGet packages...

在构建期间,因此它似乎捕获了 nuget 包。

从终端以 sudo 运行所有内容,我得到了这个:
vagrant@vagrant-ubuntu-utopic-64:/var/lib/jenkins/jobs/CalendarAPI/workspace/ConsoleApplication3$ sudo mono /var/lib/jenkins/jobs/CalendarAPI/workspace/ConsoleApplication3/bin/Debug/ConsoleApplication3.exe
Thermostate setting through Google Calendar API
====================
Could not load signature of Google.Apis.Auth.OAuth2.BearerToken+AuthorizationHeaderAccessMethod:Intercept due to: Could not load file or assembly or one of its dependencies.
Could not load signature of Google.Apis.Auth.OAuth2.IAccessMethod:Intercept due to: Could not load file or assembly or one of its dependencies.
ERROR: Could not load type 'Google.Apis.Auth.OAuth2.BearerToken+AuthorizationHeaderAccessMethod' from assembly 'Google.Apis.Auth, Version=1.9.0.26011, Culture=neutral, PublicKeyToken=null'.

我究竟做错了什么?

最佳答案

我相信这是 Microsoft 的 .NET Framework 和 Mono 之间的区别。

Google.Apis.Auth NuGet 包依赖于 Microsoft.Net.Http NuGet 包中包含的 System.Net.Http.dll。 Google.Apis.Auth 引用了旧版本的 System.Net.Http 1.5.0.0,它在 Windows 上被重定向到 System.Net.Http 4.0.0.0,但在 Mono 上这种重定向不会发生。此外,对于 .NET 4.5 项目,添加 Microsoft.Net.Http NuGet 包时不会直接引用 System.Net.Http.dll,但会为 .NET 4.0 项目引用它。

解决此问题的可能方法是:

  • 将您的项目更改为 .NET 4.0 而不是 .NET 4.5,然后重新安装 NuGet 包。
  • 确保 System.Net.Http.dll 始终在本地复制到应用程序的输出目录。
  • 为 System.Net.Http 添加绑定(bind)重定向,以便 1.5.0.0 映射到 4.0.0.0

  • 绑定(bind)重定向可能是最简单的解决方案。

    关于git - 在 Ubuntu 上使用 Jenkins 构建 .net 应用程序,无法加载类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680562/

    相关文章:

    django - munin 运行 munin-cron 时无法复制内容

    jenkins - 访问 jenkins 共享库类中的插件

    git - 查找 Git 提交来自哪个分支

    git - git config --get-all 在哪里看

    git-diff - 显示提交、提交和工作树等之间的更改

    ruby - 启动 ruby​​ 脚本 onLoad ubuntu

    r - 在 R 中通过 git2r::clone 使用 SSH 身份验证时获取 `unsupported URL protocol`

    ubuntu - 在 xterm 中,如何禁用 Alt-<SPACE> 给我窗口菜单?

    git - 本地 git 服务器上的 Jenkins 和 Git 集成

    linux - 无法发送来自 Jenkins 的电子邮件通知