Xamarin.ios 缺少Windows。在Mac上使用XS的N=5 MvvmCross示例中出现系统错误

Xamarin.ios 缺少Windows。在Mac上使用XS的N=5 MvvmCross示例中出现系统错误,xamarin.ios,xamarin.android,xamarin,mvvmcross,Xamarin.ios,Xamarin.android,Xamarin,Mvvmcross,我试图在Mac上使用XS(Stable)`从MvvmCross系列()的N+1天编译N=5解决方案。我得到以下错误: Error CS0234: The type or namespace name `Windows' does not exist in the namespace `System'. Are you missing an assembly reference? (CS0234) (MultiPage.Core) 这是由对System.Windows.Input.IComman

我试图在Mac上使用XS(Stable)`从MvvmCross系列()的N+1天编译
N=5
解决方案。我得到以下错误:

Error CS0234: The type or namespace name `Windows' does not exist in the namespace `System'. Are you missing an assembly reference? (CS0234) (MultiPage.Core)
这是由对
System.Windows.Input.ICommand
的引用触发的

N+1天系列中的所有前面的示例都可以在不必更改部件的情况下工作。我最初在这个解决方案上遇到了一个额外的错误(缺少
MvxCommand
),当我将
References
中的程序集替换为具有相同名称但来自
MvvmCross Binaries
(来自XS iOS Mac文件夹)的程序集时,这个错误就消失了。我还尝试了遵循N=22示例(基于Mac)并将其应用于N=5,但没有效果

似乎任何需要ICommand的东西对我来说都是坏的


你知道如何在Mac上编译吗?谢谢。

Xamarin将随时为PCLs提供官方支持

在此之前,Mac上的支持需要进行一些.csproj编辑,以便构建PC nuget解决方案

构建这些项目的最简单方法是:

  • 将程序集提示路径从便携式win+net45+MonoAndroid16+MonoTouch40+sl40+wp71路径切换到
    MonoTouch40
    路径
  • 并将System.Windows垫片程序集添加到列表中(如果核心项目使用这些区域,则可能还需要.Net和.Xml.Serialization垫片)
在N=21中执行此操作后,Core csproj文件的引用部分如下所示:

 <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Windows">
      <HintPath>..\packages\MvvmCross.PortableSupport.3.0.6\lib\MonoTouch40\System.Windows.dll</HintPath>
    </Reference>
    <Reference Include="Cirrious.CrossCore">
      <HintPath>..\packages\MvvmCross.HotTuna.CrossCore.3.0.6\lib\MonoTouch40\Cirrious.CrossCore.dll</HintPath>
    </Reference>
    <Reference Include="Cirrious.MvvmCross">
      <HintPath>..\packages\MvvmCross.HotTuna.StarterPack.3.0.6\lib\MonoTouch40\Cirrious.MvvmCross.dll</HintPath>
    </Reference>
    <Reference Include="Cirrious.MvvmCross.Localization">
      <HintPath>..\packages\MvvmCross.HotTuna.CrossCore.3.0.6\lib\MonoTouch40\Cirrious.MvvmCross.Localization.dll</HintPath>
    </Reference>
    <Reference Include="Cirrious.MvvmCross.Plugins.Json">
      <HintPath>..\packages\MvvmCross.HotTuna.Plugin.Json.3.0.6\lib\MonoTouch40\Cirrious.MvvmCross.Plugins.Json.dll</HintPath>
    </Reference>
    <Reference Include="Cirrious.MvvmCross.Plugins.JsonLocalisation">
      <HintPath>..\packages\MvvmCross.HotTuna.Plugin.JsonLocalisation.3.0.6\lib\MonoTouch40\Cirrious.MvvmCross.Plugins.JsonLocalisation.dll</HintPath>
    </Reference>
    <Reference Include="Cirrious.MvvmCross.Plugins.ResourceLoader">
      <HintPath>..\packages\MvvmCross.HotTuna.Plugin.ResourceLoader.3.0.6\lib\MonoTouch40\Cirrious.MvvmCross.Plugins.ResourceLoader.dll</HintPath>
    </Reference>
    <Reference Include="Newtonsoft.Json">
      <HintPath>..\packages\MvvmCross.HotTuna.Plugin.Json.3.0.6\lib\MonoTouch40\Newtonsoft.Json.dll</HintPath>
    </Reference>
  </ItemGroup>

..\packages\MvvmCross.PortableSupport.3.0.6\lib\monotuch40\System.Windows.dll
..\packages\MvvmCross.HotTuna.CrossCore.3.0.6\lib\monotuch40\cirries.CrossCore.dll
..\packages\MvvmCross.HotTuna.StarterPack.3.0.6\lib\monotuch40\cirries.MvvmCross.dll
..\packages\MvvmCross.HotTuna.CrossCore.3.0.6\lib\monotuch40\cirries.MvvmCross.Localization.dll
..\packages\MvvmCross.HotTuna.Plugin.Json.3.0.6\lib\monotuch40\cirries.MvvmCross.Plugins.Json.dll
..\packages\MvvmCross.HotTuna.Plugin.jsonLocalization.3.0.6\lib\monotuch40\cirries.MvvmCross.Plugins.jsonLocalization.dll
..\packages\MvvmCross.HotTuna.Plugin.ResourceLoader.3.0.6\lib\monotuch40\cirries.MvvmCross.Plugins.ResourceLoader.dll
..\packages\MvvmCross.HotTuna.Plugin.Json.3.0.6\lib\monotuch40\Newtonsoft.Json.dll
将其与原始版本进行比较


如果这感觉太“黑”,那么目前的替代方法是不使用nuget,而是使用binaries文件夹-在N=22中有一个关于这方面的演练-



希望在我写完这篇文章的时候,Xamarin已经提供了他们的PCL支持,所以这将过时…

成功了!谢谢你,斯图尔特!关于Xamarin的PCL支持,据我所知还有4周的时间,基于此,我们非常感谢您提供此解决方案。