9

MvvmCross.PortableSupport.3.0.1.nuspec を見ると、次の行があることに気付きました。

<file src="_._" target="lib\portable-win+net45+MonoAndroid16+MonoTouch40+sl40+wp71\_._" />.

nuget がそのリスト (win+...+sl40+wp71) からサポートされているフレームワークのリストを作成していること、およびこのライブラリが追加されるプロジェクトがそれらのフレームワークの 1 つをサポートする必要があることを理解しています。基本的に、これを追加できるプロジェクトの種類を列挙します。

このパッケージを Profile49 を持つ移植可能なプロジェクトにインストールしようとすると、Windows 上の Profile49 は net45+wp80 であるため、これは Windows で動作します。

ただし、Mac では、Profile49 は net45+wp80+MonoAndroid10+MonoTouch10 です。

これは、サポートされているフレームワーク win+net45+MonoAndroid16+MonoTouch40+sl40+wp71 を含む nuget パッケージを、Mac の Profile49 のプロジェクトにインストールできないことを意味します。これは、下位バージョンのフレームワーク (MonoTouch10 および MonoAndroid10) があるためです。

  • 文字列 Portable-win+net45+MonoAndroid+MonoTouch+sl40+wp71 を mvvmcross 側で代わりに使用できますか? 特定のバージョンの理由はありますか?

  • Xamarin に同梱されているプロファイル (例: /Library/Frameworks/Mono.framework/External/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile49) に MonoTouch10 と MonoAndroid10 が含まれているのはなぜですか?

あなたの洞察に感謝します。

4

2 に答える 2

16

更新: Xamarin Studio のアルファ チャネルを使用している場合、Windows から PCL をコピーする必要はなくなりました。v4.0、Profile158 を使用できます。これは、非同期でもすぐに使用できます。

更新: PCL で async を機能させる方法については、この記事のXamarin Studio Mac、ポータブル クラス ライブラリ、Async および Androidに追加したので、PCL で async を使用する場合は、この記事の後に移動してください。

MacでMvvm + PCL + Xamarin Studioを機能させるために必要だった問題に対する一種の実用的な解決策。詳細は以下をご覧ください。

以下の手順は、Android および PCL プロジェクトで機能するようにします。iOS プロジェクトの場合、Mac 上の Xamarin Studio は、MonoTouch,Version=v1.0 の TargetFramework を Nuget に通信しています。mvvm パッケージには +MonoTouch40 が含まれているため、Nuget はプロジェクトへのパッケージのインストールを拒否します。回避策は追加することです

  <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

.csproj に Nuget を使用してパッケージを追加し、TargetFrameworkVersion を v1.0 に戻します。

Visual Studio で動作を確認しました。TargetFramework MonoTouch,Version=v4.0 のプロジェクトが Nuget プラグインに報告されます。これが、Xamarin Studio Mac ではなく Visual Studio で同じパッケージが機能する理由です。これは一貫性があるように修正する必要があると思います。

手順

Xamarin スタジオ

  1. Mac の Xamarin Studio で Beta または Alpha チャネルを使用してください。
  2. Nuget パッケージ マネージャーをインストールします: Xamarin Studio / アドイン マネージャー

.NETPortable を Mono.Framework にインストールする

  1. .NETPortable (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETPortable) フォルダーを Windows PC から Mac にコピーします。
  2. /Library/Frameworks/Mono.framework/External/xbuild-frameworks/.NETPortable/ の下に配置します (これが Xamarin Studio に同梱されている場合に備えて、既存のフォルダーを上書きしないようにしてください!!!) (こちらも参照)

パッチ ナゲット

パッチが適用されたフォークは、 https ://nuget.codeplex.com/SourceControl/network/forks/takoyakich/nuget/latest で見つけることができます。2.7 ブランチを使用してください。自分にパッチを当てたい場合:

git clone https://git01.codeplex.com/nuget
cd nuget
git checkout -b 2.7 origin/2.7 

patch -p1 < {patch file saved from below}

cd src/Core
xbuild

cp bin/Debug/NuGet.Core.dll  ~/Library/Application\ Support/XamarinStudio-4.0/LocalInstall/Addins/MonoDevelop.PackageManagement.0.6/NuGet.Core.dll

Xamarin Studio を開いたままにしている場合は、再起動します。

試して!

  1. Xamarin Studio を開く
  2. 新しいポータブル ライブラリを作成する
  3. プロジェクトで、オプション、ビルド/一般に移動すると、ターゲット フレームワークを選択できるダイアログが表示されます (たとえば、.net45+wp8 は Profile49 に対応します)。
  4. 参照への移動、Nuget パッケージの管理、Mvvmcross の追加
  5. ここから@slodge の優れた n+1 mvvmcrossチュートリアル ビデオの1 つに従ってください ...

Nuget.Core.dll へのパッチ:



    diff --git a/src/Core/NETPortable/NetPortableProfileTable.cs b/src/Core/NETPortable/NetPortableProfileTable.cs
    index 6f6a9ff..edc710c 100644
    --- a/src/Core/NETPortable/NetPortableProfileTable.cs
    +++ b/src/Core/NETPortable/NetPortableProfileTable.cs
    @@ -49,16 +49,12 @@ namespace NuGet
             private static NetPortableProfileCollection BuildPortableProfileCollection()
             {
                 var profileCollection = new NetPortableProfileCollection();
    -            string portableRootDirectory =
    -                    Path.Combine(
    -                        Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolderOption.DoNotVerify),
    -                        @"Reference Assemblies\Microsoft\Framework\.NETPortable");
    -
    +            string portableRootDirectory = GetPortableRootDirectory ();
                 if (Directory.Exists(portableRootDirectory))
                 {
                     foreach (string versionDir in Directory.EnumerateDirectories(portableRootDirectory, "v*", SearchOption.TopDirectoryOnly))
                     {
    -                    string profileFilesPath = versionDir + @"\Profile\";
    +                    string profileFilesPath = Path.Combine(versionDir,"Profile");
                         profileCollection.AddRange(LoadProfilesFromFramework(profileFilesPath));
                     }
                 }
    @@ -66,6 +62,22 @@ namespace NuGet
                 return profileCollection;
             }

    +        private static string GetPortableRootDirectory()                                                                                                                                                                                                                                                                                               
    +        {                                                                                                                                                                                                                                                                                                                                              
    +            if (IsMonoOnMac ()) {                                                                                                                                                                                                                                                                                                                      
    +                return "/Library/Frameworks/Mono.framework/External/xbuild-frameworks/.NETPortable";                                                                                                                                                                                                                                                   
    +            }                                                                                                                                                                                                                                                                                                                                          
    +            return Path.Combine(                                                                                                                                                                                                                                                                                                                       
    +                Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolderOption.DoNotVerify),                                                                                                                                                                                                                     
    +                @"Reference Assemblies\Microsoft\Framework\.NETPortable");                                                                                                                                                                                                                                                                             
    +        }                                                                                                                                                                                                                                                                                                                                              
    +                                                                                                                                                                                                                                                                                                                                                       
    +        static bool IsMonoOnMac ()                                                                                                                                                                                                                                                                                                                     
    +        {                                                                                                                                                                                                                                                                                                                                              
    +            // Environment.OSVersion.Platform returns UNIX, didn't find a better way :-(                                                                                                                                                                                                                                                               
    +            return File.Exists ("/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder");                                                                                                                                                                                                                                                      
    +        }       
    +
             private static IEnumerable<NetPortableProfile> LoadProfilesFromFramework(string profileFilesPath)
             {
                 if (Directory.Exists(profileFilesPath))

于 2013-07-16T08:15:31.160 に答える