XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2018/05/21

如何解決 Your project is not referencing the "MonoAndroid,Version=v8.1" framework 錯誤說明

了解更多關於 [Xamarin.Android] 的使用方式
了解更多關於 [Xamarin.iOS] 的使用方式
了解更多關於 [Xamarin.Forms] 的使用方式
了解更多關於 [Hello, Android:快速入門] 的使用方式
了解更多關於 [Hello, iOS – 快速入門] 的使用方式
了解更多關於 [Xamarin.Forms 快速入門] 的使用方式

最近將 Surface Pro 4 作業系統重新安裝,並且安裝最新的 Visual Studio 2017 15.7.1 版本,並且透過 Prism Template Pack 來產生一個 Xamarin.Forms 的專案,不過,當想要建置 Android 的專案 (此時,我並沒有進行任何 Xamarin.Forms 的相關設計,只是建立好 Xamarin.Forms 專案),卻得到了底下錯誤訊息。
VS2017 15.7.1 MonoAndroid 8.1 Error
Your project is not referencing the "MonoAndroid,Version=v8.1" framework. 
Add a reference to "MonoAndroid,Version=v8.1" in the "frameworks" section of 
your project.json, and then re-run NuGet restore.
我的另外一台電腦中,在很早之前,就已將安裝了 Visual Studo 2017,不過,這幾天才將 Viusal Studio 2017 從 15.6.x 升級到 15.7.1,不過,我可以確定的是,在我還沒有升級到 VS2017 15.7.1 版本,我是可以順利建立起 Xamarin.Forms 的專案,並且可以順利正常建置該專案。 (有個詭異現象,那就是,這台電腦原本在 15.7.1 版本中,所建立的 Xamarin.Forms 專案,是可以正常建置的,直到昨天晚上,我也沒有做任何升級與安裝相關軟體的動作,卻發生了一樣的問題,卻也會得到一樣的錯誤訊息,無法順利建置成功了)

如何修正這個問題

  • 請在 Visual Studio 2017 的 方案總管中,使用滑鼠雙擊 Android 專案中的 Propertis 節點,找到 應用程式 標籤頁次,並在這個標籤頁次中,您會看到了 使用下列 Android 版本編譯: (目標 Framework) 這個下拉選單,此時他預設的選項是 使用最新平台 (Android 8.1 (Oreo)) Android Properties Application
這個時候,我們先來查看這個 Android 專案的 .csproj 檔案內容,我們看到了,他的 TargetFrameworkVersion 項目標示其值為 v7.1 ,而另外一個標籤 AndroidUseLatestPlatformSdk 該項目的值為 true。
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{C6CAF76D-0C7C-4DA4-8DE1-617BF0D573C0}</ProjectGuid>
    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>BlankApp10.Droid</RootNamespace>
    <AssemblyName>BlankApp10.Android</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
    <AndroidApplication>True</AndroidApplication>
    <AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    <AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>
    <AndroidStoreUncompressedFileExtensions />
    <MandroidI18n />
    <JavaMaximumHeapSize />
    <JavaOptions />
    <NuGetPackageImportStamp></NuGetPackageImportStamp>
  </PropertyGroup>
  • 請先選擇 目標 Framework 下拉選單為 Android 8.1 (Oreo),我們也觀察,這個時候,Android .csproj 檔案,變成了如下內容
    注意,我們是將原先的 使用最新平台 (Android 8. Oreo) 選項,變更成為第二個 Android 8.1 (Oreo) 選項
    這個時候,他的 TargetFrameworkVersion 項目標示其值為 8.1 ,而另外一個標籤 AndroidUseLatestPlatformSdk 該項目的值為 false。
    Android Properties Application
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{C6CAF76D-0C7C-4DA4-8DE1-617BF0D573C0}</ProjectGuid>
    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>BlankApp10.Droid</RootNamespace>
    <AssemblyName>BlankApp10.Android</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
    <AndroidApplication>True</AndroidApplication>
    <AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    <AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
    <AndroidStoreUncompressedFileExtensions />
    <MandroidI18n />
    <JavaMaximumHeapSize />
    <JavaOptions />
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
  • 最後,請先選擇 目標 Framework 下拉選單為 使用最新平台 (Android 8. Oreo) 選項,我們也觀察,這個時候,Android .csproj 檔案,變成了如下內容
    這個時候,我們再度將目標 Framework 設定選項,修改成為最初產生專案的設定值,即為 使用最新平台
    現在,我們觀察到,專案中的 .csproj 檔案中, TargetFrameworkVersion 項目標示其值為 8.1 ,而另外一個標籤 AndroidUseLatestPlatformSdk 該項目的值為 true。
    Android Properties Application
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{C6CAF76D-0C7C-4DA4-8DE1-617BF0D573C0}</ProjectGuid>
    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>BlankApp10.Droid</RootNamespace>
    <AssemblyName>BlankApp10.Android</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
    <AndroidApplication>True</AndroidApplication>
    <AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    <AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>
    <AndroidStoreUncompressedFileExtensions />
    <MandroidI18n />
    <JavaMaximumHeapSize />
    <JavaOptions />
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>

重新進行建置測試

  • 現在,我們需要重新進行建置動作,為了避免一些雜訊殘留,所以,我們先將這個方案(Solution)進行清除,接著,將 Android 專案與 Xamarin.Forms 專案中的 bin / obj 這兩個目錄,從檔案中刪除掉。
  • 接著,選擇將 Android 專案來建置
  • 稍微等候一段時間,您將會發現到這個 Android 專案,竟然可以順利編譯成功了。
1>------ 已開始建置: 專案: BlankApp10, 組態: Debug Any CPU ------
1>BlankApp10 -> D:\Vulcan\Projects\CannotBuildAndroid\BlankApp10\BlankApp10\BlankApp10\bin\Debug\netstandard2.0\BlankApp10.dll
2>------ 已開始建置: 專案: BlankApp10.Android, 組態: Debug Any CPU ------
2>  BlankApp10.Android -> D:\Vulcan\Projects\CannotBuildAndroid\BlankApp10\BlankApp10\BlankApp10.Android\bin\Debug\BlankApp10.Android.dll
2>  沒有辦法解決 "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 和 "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" 之間的衝突。任意選擇 "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"。
========== 建置: 2 成功、0 失敗、0 最新、0 略過 ==========
  • 根據從網路上的搜尋與分析,這個問題極有可能是 VS2017 15.7.1 所引發的一個內部 Bug,因此,在尚未取得更新版本的 Visual Studio 2017 前,看樣子,只能夠使用這個方法來進行排除該問題了。

沒有留言:

張貼留言