NetStandard Library无法依赖VSTS Build Agent

时间:2016-07-14 09:20:19

标签: xamarin msbuild xamarin.android azure-devops

我目前有一个Xamarin.Android项目,该项目引用了引用AutoMapper 5.0.2的.NET Standard 1.1库。

当我尝试通过VSTS构建时,我收到此错误

  

C:\ Program Files   (86)\的MSBuild \ Xamarin \的Android \ Xamarin.Android.Common.targets(1316,2):   错误:加载程序集时出现异常:   System.IO.FileNotFoundException:无法加载程序集   'System.Collections.Specialized,Version = 4.0.1.0,Culture = neutral,   公钥= b03f5f7f11d50a3a”。也许它不存在于Mono中   对于Android个人资料?

此解决方案在我的本地计算机上构建完美,并在Android模拟器中运行。

我尝试过的事情(没有一个有效)

  1. 直接针对Android安装AutoMapper Nuget软件包 项目。
  2. 安装System.Collections.Specialized Android项目。
  3. 在Android项目中执行<CopyNuGetImplementations>true</CopyNuGetImplementations>
  4. 另外,作为旁注,我在整个项目中都有.NET Standard 1.1库,但我可以从构建日志中看到它使用.NET Standard 1.3。不确定这是否会产生影响,因为我不确定构建过程如何管理这些标准。

      

    从中复制文件   “C:\用户\ buildguest.nuget \包\ AutoMapper \ 5.0.2 \ LIB \ netstandard1.3 \ AutoMapper.dll”   到“C:\ a \ 1 \ b / Release \ AutoMapper.dll”。

    更新1

    只是补充说我已经尝试在构建代理中使用Nuget 3.4.4和Nuget 3.5.0-beta2,虽然这解决了我遇到的其他问题,但它并没有解决我遇到的当前问题。

    更新2

    这是我的Android project.json

    {
      "dependencies": {
        "Newtonsoft.Json": "9.0.1"
      },
      "frameworks": {
        "MonoAndroid,Version=v6.0": {}
      },
      "runtimes": {
        "win": {}
      }
    }
    

    这是我的Portable project.json

    {
      "supports": {},
      "dependencies": {
        "AutoMapper": "5.0.2",
        "NETStandard.Library": "1.6.0",
        "Xamarin.Forms": "2.3.0.107"
      },
      "frameworks": {
        "netstandard1.1": {
          "imports": "portable-win+net45+wp8+win81+wpa8"
        }
      }
    }
    

    更新3:7月18日 只需添加更多测试用例

    1. 使用packages.config创建了一个全新的Xamarin Android项目,现有的nuget.exe。一切都有效。
    2. 添加AutoMapper参考,在本地构建和运行。 VSTS Build Agent失败
    3. 更新了Nuget.exe - 构建时仍然失败
    4. 更新到project.json - 仍然无法构建。
    5. 在VSTS的Visual Studio Build步骤中,我无法获得AutoMapper 5.0.2参考的空白项目。总是和上面一样的错误。

2 个答案:

答案 0 :(得分:1)

我相信您需要添加构建步骤以在构建时下载最新的NuGet.exe,然后通过构建脚本调用nuget restore或配置VSTS NuGet Restore任务的备用路径以使用您下载的那个

问题是与VSTS捆绑在一起的NuGet.exe太旧了。

您可以在此处找到直接下载路径: https://dist.nuget.org/index.html

答案 1 :(得分:1)

这是由Hosted Build Agent上安装的旧Xamarin版本引起的。托管构建代理程序上安装的版本是#34; Xamarin for Visual Studio 4.0.3.214&#34;。我部署了一个内部构建代理并安装了此版本,然后使用此构建代理对构建进行排队,构建将失败并显示相同的错误消息。将版本升级到最新的4.1.1.3版本后,构建成功完成。

因此,解决此问题的方法是deploy your own build agent,并在其上安装最新的Xamarin。然后使用此内部部署构建代理运行构建。