我当前有一个 Xamarin.Android 项目,该项目引用了 .NET Standard 1.1 库,而该库又引用了 AutoMapper 5.0.2。
当我尝试通过 VSTS 构建它时,我收到此错误
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1316,2): Error : Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'System.Collections.Specialized, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Perhaps it doesn't exist in the Mono for Android profile?
该解决方案在我的本地计算机上构建得非常好,并在 Android 模拟器中运行。
我尝试过的事情(但没有成功)
- 直接针对 Android 安装 AutoMapper Nuget 包 项目。
- 正在安装 System.Collections.Specialized在里面 安卓项目。
- 正在做
<CopyNuGetImplementations>true</CopyNuGetImplementations>
在 Android 项目中。
顺便说一句,我的项目中一直都有 .NET Standard 1.1 库,但我可以从构建日志中看到它使用 .NET Standard 1.3。不确定这是否会产生影响,因为我不确定构建过程如何管理这些标准。
Copying file from "C:\Users\buildguest.nuget\packages\AutoMapper\5.0.2\lib\netstandard1.3\AutoMapper.dll" to "C:\a\1\b/Release\AutoMapper.dll".
更新1
补充一下,我尝试在构建代理中使用 Nuget 3.4.4 和 Nuget 3.5.0-beta2,虽然这解决了我遇到的其他问题,但它没有解决我当前遇到的问题。
更新2
这是我的 Android 项目.json
{
"dependencies": {
"Newtonsoft.Json": "9.0.1"
},
"frameworks": {
"MonoAndroid,Version=v6.0": {}
},
"runtimes": {
"win": {}
}
}
这是我的可移植项目.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 日 只需添加更多测试用例
- 创建了一个全新的 Xamarin Android 项目,包含packages.config、现有的 nuget.exe。所有作品。
- 添加 AutoMapper 引用,在本地构建并运行。 VSTS 构建代理失败
- 更新了 Nuget.exe - 构建仍然失败
- 更新到project.json - 构建仍然失败。
我什至无法获得在 VSTS 的 Visual Studio 构建步骤中使用 AutoMapper 5.0.2 引用的空白项目。始终出现与上面相同的错误。
最佳答案
这是由Hosted Build Agent上安装的旧Xamarin版本引起的。托管构建代理上安装的版本是“Xamarin for Visual Studio 4.0.3.214”。我部署了一个本地构建代理并安装了此版本,然后使用此构建代理对构建进行排队,构建将失败并显示相同的错误消息。我将版本升级到最新的4.1.1.3版本后,构建成功完成。
因此,解决此问题的方法是 deploy your own build agent并在其上安装最新的 Xamarin。然后使用此本地构建代理运行您的构建。
关于xamarin - NetStandard 库未获得对 VSTS 构建代理的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38370304/