1

Xamarin Android 및 iOS를 지원하는 Simple.OData.Client 용 NuGet 패키지를 만들었습니다. 이 라이브러리는 Microsoft.Bcl.Async를 사용합니다. Android 및 iOS 시뮬레이터를 사용하여 테스트 OK 갔다,하지만 난 다른 프로젝트에이 새로운 NuGet 패키지를 설치할 때, 다음과 같은 메시지와 함께 터치/이드 프로젝트를 컴파일에 실패 :Xamarin Mono 프로젝트의 Microsoft.Threading.Tasks.Extensions

C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(720,2): error : Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Perhaps it doesn't exist in the Mono for Android profile? 
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(720,2): error : File name: 'Microsoft.Threading.Tasks.Extensions.dll' 

은 물론 더 Microsoft.Bcl이 없습니다. 라이브러리 테스트가이 플랫폼을 통과 한 이후 Mono 플랫폼 용 비동기 팩 (다른 한편으로는)은 약간의 코드 수정보다는 Visual Studio를 행복하게 만드는 도전 과제라고 생각합니다.

Microsoft.Bcl.Async에 종속 된 Mono PCL에서 누구도 관리 할 수 ​​있습니까?

답변

1

일반적으로 패키지의 코드가 다른 NuGet 패키지에 의존하면 패키지 종속성을 선언하여 패키지를 설치하는 사람이 의존하는 패키지를 얻을 수 있도록해야합니다. 이런 문제를 해결해야합니다.

그러나이 경우 훨씬 더 복잡합니다. Microsoft.Bcl.Async는 Mono 플랫폼을 지원하지 않으므로 패키지 종속성을 선언 할 수 없습니다 (또는 설치하지 않으면 항상 설치하지 못할 수 있습니다). 불행히도 Microsoft.Bcl.Async의 라이센스는이를 "Windows 플랫폼"으로 제한합니다. 저는 변호사가 아니지만 Microsoft.Threading.Tasks.Extensions.dll을 패키지의 일부로 배포하면 안됩니다. 마지막으로 Mono 플랫폼에 대한 공식적인 PCL 지원은 아직 없기 때문에 공식적인 PCL 지원이 나올 때 변경 될 수있는 솔루션을 제시 할 수 있습니다.

이 작업을 수행하려는 경우 기본적으로 수행해야 할 작업은 Microsoft 플랫폼에서 사용할 Microsoft.Bcl 및 Microsoft.Bcl.Async와 같은 이름의 DLL을 만드는 것입니다. 이러한 어셈블리에서는 Mono가 이미 구현 한 형식 (System. * DLL의 형식이어야 함)에 대해 형식 전달을 넣고 다른 형식에 대한 고유 한 구현을 만듭니다 (AsyncBridge 소스 코드가 유용합니다) . 이것이 BUILD 2012 PCL 데모 중 하나에 대한 것입니다. 그 코드는 here입니다. AsyncFacades와 AsyncBridge는 관련 프로젝트입니다. 이 문제에 걸려 넘어 그 nuget에서 Simple.oData.Client을 가져올 때, 단지 nuget에서 다음 패키지를 설치 들어

+0

난은 확실히 참조 변호사가 문제를 피할 수 있습니다 :-) 나는 당신의 샘플을 보았습니다, 당신이 AsyncFacades에서 몇몇 타입을 전달했지만 어떤 인터페이스를 정의한 것을 볼 수 있습니다. 이것에 대한 이유는 무엇입니까? System.Net shim을 본 적이 있고 유형 전달 만있었습니다. 서명은 어떻게하나요? Mono 플랫폼 용 Tasks.Extensions.dll에 서명해야한다고 가정 할 때, 언제 키 파일을 얻어야합니까? –

+0

@ VagifAbilov 인터페이스는 Mono에 없었던 인터페이스 였으므로 직접 입력 할 필요가 없었습니다.서명의 경우 여기에 설명 된대로 어셈블리를 지연 서명해야합니다. http://stackoverflow.com/a/13032213/1509 –

0

나는이 문제를 발견했다고 생각합니다.

앞서 나는 Simple.OData.Client nuspec 파일에서 다음 줄을했다 :

<file src="Simple.OData.Client.Core\bin\Release\Microsoft.Threading.Tasks.Extensions.dll" target="lib\portable-net403+win8+sl5+wp8+MonoAndroid16+MonoTouch40\Microsoft.Threading.Tasks.Extensions.dll" /> 

이 Microsoft.Bcl.Async가 Tasks.Extensions.dll를 복사 알아서해야하기 때문에 어떻게해야하지 . 나는이 사실을 Microsoft에보고하여 RTM 버전의 Microsoft.Bcl.Async에서 수정 될 것으로 예상했습니다. 분명히 그렇지 않았기 때문에 Microsoft.Bcl.Async에 종속 된 모든 NuGet 패키지는이 파일을 계속 복사해야합니다. 그 때 그것은 작동 할 것이다.

1

:

마이크로 소프트하는 Bcl 비동기 휴대용 마이크로 소프트하는 Bcl 비동기

+0

감사합니다. 방금이 버그 보고서를 받았습니다. 그것을 확인하려고합니다. –

관련 문제