gpt4 book ai didi

xamarin.ios - 让 PCL、Mvvmcross、Nuget 和 Xamarin Studio 在 Mac 上播放 "nice"

转载 作者:行者123 更新时间:2023-12-03 13:05:46 27 4
gpt4 key购买 nike

查看 MvvmCross.PortableSupport.3.0.1.nuspec
我注意到有以下行:

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

我知道 nuget 正在从该列表 (win+...+sl40+wp71) 创建一个受支持框架的列表,并且添加该库的项目必须支持这些框架之一。基本上它枚举了可以添加到的项目类型。

现在,如果我尝试将此包安装到具有 Profile49 的可移植项目中,这将适用于 Windows,因为 Windows 上的 Profile49 是 net45+wp80。

然而在 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?

  • 谢谢你的见解。

    最佳答案

    更新: 如果您使用的是 Xamarin Studio 的 Alpha channel ,则不再需要从 Windows 复制 PCL。您可以使用 v4.0、Profile158,这也适用于 Async 开箱即用。

    更新: 我在这篇文章中添加了关于如何让异步在 PCL 中工作的说明:Xamarin Studio Mac, Portable class library, Async and Android,所以如果你想在你的 PCL 中使用异步,请在这篇文章之后去那里。

    我必须让 Mac 上的 Mvvm+PCL+Xamarin Studio 工作的问题的一种有效解决方案。详情请见下文。

    The steps below make things work for Android and PCL projects. For iOS projects Xamarin Studio on Mac is communicating a TargetFramework of MonoTouch,Version=v1.0 to Nuget. Since the mvvm packages contain +MonoTouch40 Nuget refuses to install the packages on the project. A workaround is to add

      <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

    to the .csproj, add the packages with Nuget and set TargetFrameworkVersion back to v1.0.

    I have verified the behaviour in Visual Studio. There a project with TargetFramework MonoTouch,Version=v4.0 is reported to the Nuget plugin. This is why the same packages work on Visual Studio an not on Xamarin Studio Mac. I guess this should be corrected to be consistent.



    脚步

    Xamarin 工作室
  • 确保在 Mac 下的 Xamarin Studio 中使用 Beta 或 Alpha channel
  • 安装 Nuget 包管理器:Xamarin Studio/加载项管理器

  • 将 .NETPortable 安装到 Mono.Framework
  • 将 .NETPortable (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETPortable) 文件夹从 Windows PC 复制到 Mac
  • 将其放在/Library/Frameworks/Mono.framework/External/xbuild-frameworks/.NETPortable/(确保不要覆盖已经存在的文件夹,以防 Xamarin Studio 附带此文件夹!!!)( see here also )

  • 补丁 Nuget

    可以在此处找到修补过的分支: 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。

    测试一下!
  • 打开 Xamarin Studio
  • 创建一个新的可移植库
  • 在项目上,转到选项,构建/常规,您应该会看到一个对话框,让您选择目标框架(例如 .net45+wp8 对应于 Profile49)
  • 转到引用,管理 Nuget 包,添加 Mvvmcross
  • 按照此处的 @slodge 's excellent n+1 mvvmcross 教程视频之一进行操作...


  • 修补 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))

    关于xamarin.ios - 让 PCL、Mvvmcross、Nuget 和 Xamarin Studio 在 Mac 上播放 "nice",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653208/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com