使用 PCL 和 Xamarin 对 Azure 移动服务执行单元测试时程序集版本不匹配
Posted
技术标签:
【中文标题】使用 PCL 和 Xamarin 对 Azure 移动服务执行单元测试时程序集版本不匹配【英文标题】:Assembly version mismatch when performing unit-testing of Azure Mobile Services with PCL and Xamarin 【发布时间】:2014-01-01 06:15:24 【问题描述】:美好的一天。
我想为我的 PCL xamarin 库创建 NUnit 测试。 目前 xamarin 组件中有 1.1.0 Azure 移动服务,NuGet 中有 1.1.1
据我所知,每个平台我都需要 MobileServices.Ext,所以我需要 Windows 的 1.1.0 版本。我对吗?是这样,我在哪里可以找到它?
我尝试从 xamarin 组件存储(存储版本 1.1.0,文件版本 1.0.0)添加 Microsoft.WindowsAzure.Mobile,从 Nuget(版本 1.1.0)添加 Microsoft.WindowsAzure.Mobile.Ext
这里是例外
System.TypeInitializationException : Инициализатор типа “RateIt.Backend.SAL.AzureWorker” выдал исключение。 ----> System.IO.FileLoadException : Не удалось загрузить файл или сборку “Microsoft.WindowsAzure.Mobile.Ext,版本=1.0.0.0,文化=中性, PublicKeyToken=null" либо одну из их зависимостей。Найденное определение манифеста сборки не соответствует ссылке на сборку。 (Исключение из HRESULT: 0x80131040)
单元测试项目需要这个:Microsoft.WindowsAzure.Mobile.Ext, Version=1.0.0.0
正如@TheESJ 建议的那样,它尝试添加绑定
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Mobile.Ext" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.1.0.0" newVersion="1.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
这没有帮助。现在我找到了解决方法:“链接项目扩展”,PCL 中的所有文件都链接到带有测试的项目,所以我可以使用 NuGet 中的 azure,而不必担心 PCL
【问题讨论】:
您需要重定向到您使用单元测试部署的版本。这将是 0.0.0.0-1.1.0.0 > 1.1.0.0。 【参考方案1】:您可以在 app.config 中为单元测试提供 bindingRedirect,并且单元测试运行程序在加载单元测试程序集时应遵守此规定。 Nuget 会自动为应用程序执行此操作,但不会为类库执行此操作。如果你有一个应用程序,你可以从那里复制绑定重定向。
【讨论】:
【参考方案2】:1.1.0 版 NuGet 包和 Xamarin 组件一起使用时会出现一些问题。从 1.1.5 版开始,情况不再如此,您应该会发现它们可以无缝地协同工作。
此外,NuGet 包的 1.1.5 版支持 Xamarin.ios 和 Xamarin.android 目标,因此如果您仅使用 Visual Studio,则可以完全跳过该组件。
有关更多信息,请参阅this tutorial。
【讨论】:
以上是关于使用 PCL 和 Xamarin 对 Azure 移动服务执行单元测试时程序集版本不匹配的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 表单 HttpClient GetAsync
在 Xamarin Forms 项目中使用 AAD 和 Google 的 Azure 身份验证在授权后未重定向回应用程序
如何在 xamarin 跨平台应用程序中创建具有 sqlite 支持的 PCL
有没有办法使用 Xamarin.Forms PCL 项目中的 Devexpress.Xamarin.Android.Charts