0

我正在尝试在 Mac 上使用 XS (Stable)`N=5从 MvvmCross 系列的 N+1 天 ( https://github.com/slodge/NPlus1DaysOfMvvmCross/tree/master/N-05-MultiPage ) 编译解决方案。我收到以下错误:

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 上编译的任何想法?谢谢。

4

1 回答 1

0

Xamarin 现在随时都会提供对 PCL 的官方支持。

在此之前,Mac 上的支持需要一些 .csproj 编辑才能构建 PC-nuget 解决方案。

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

  • 将程序集提示路径从portable-win+net45+MonoAndroid16+MonoTouch40+sl40+wp71路径切换到MonoTouch40路径。
  • 并将 System.Windows shim 程序集添加到列表中(如果您的核心项目使用这些区域,可能还需要 .Net 和 .Xml.Serialization shims)

在 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>

将此与https://github.com/slodge/NPlus1DaysOfMvvmCross/blob/master/N-21-Babel/Babel.Core/Babel.Core.csproj上的原始版本进行比较


如果这感觉太“hacky”,那么目前的替代方法是不使用 nuget,而是使用二进制文件夹 - 在 N=22 中有一个演练 - http://slodge.blogspot.com/2013/05/ n22-from-basics-on-mac-n1-days-of.html


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

于 2013-06-18T06:37:40.883 回答