天天看點

【Xamarin】揭秘生成配置

我相信每個人都熟悉使用大多數解決方案模闆中的Debug和Release配置。 以Debug模式建構項目時使用Debug配置,使用Release模式建構項目時使用Release配置,這一點似乎很明顯。然而,可能不太清楚的是切換配置時實際發生了什麼,或者如何添加自己的自定義配置。今天,我們将深入了解建構配置的世界,看看它們如何能大大提高您的建構時間和生産率。

【Xamarin】揭秘生成配置
【Xamarin】揭秘生成配置

簡單地說,配置是一組項目屬性。在預設的Debug配置中,例如, debugging會啟用,在Release配置中不會啟用Debug。您可以設定在每個配置中使用的連結器選項,要建構什麼架構(CPU),等等。您還可以進一步定義平台,以便根據是否為裝置或仿真器建構,可以有單獨的項目設定。換言之,你也可以在你的項目中,通過配置|平台來進行每一個項目的設定。

如何編輯和添加一個配置,我們将從一個模闆Android項目開始:

在VS for Mac中建立一個新的“Android App”: New Project > Android > App > Android App.

在VS for Windows 建立一個 “Single-View App (Android)”: 建立new project… > Android > Single-View App (Android).

該模闆建立了一個簡單的Android應用程式,其中有一個點選計數的按鈕。它有兩個配置預設設定,Debug和Release,和一個平台,AnyCPU。這些隻是沒有任何内在含義的名字,除了考慮使用配置時。随後我們将增加兩個新配置,名字叫DebugDevice 和DebugEmulator。這将使我們能夠在調試到裝置(ARM)或仿真器(x86)時快速設定所需的項目選項/屬性。 每個隻為裝置或仿真器所需的架構建構,減少開發期間的建構時間。

首先,讓我們看看兩個預設Debug和Release配置之間有什麼不同。為此,右鍵單擊“解決方案資料總管”中的項目并選擇“選項”(VS for Mac)或“屬性”(VS for Windows),打開項目屬性。一旦項目選項/屬性打開,您将在下拉清單中看到配置和平台字段,選擇要檢視屬性設定的配置和平台。 

【Xamarin】揭秘生成配置
【Xamarin】揭秘生成配置

下拉可能不存在(VS for Mac)或禁用(VS for Windows),這意味着您選擇的設定頁面上的設定是全局的,即它們将應用于所有配置和平台。你能夠在建構>全局設定而檢視(VS for Mac)或者在應用設定頁檢視(VS for Windows)。 預設Debug和Release配置的項目設定中的大部分差異在上面所示的Android建構/ Android選項設定頁面中。打開項目選項/屬性,在左側選擇Android建構(VS for Mac)/ Android選項(VS for Windows)。確定在配置下拉的頂部選擇Debug。注意在VS for Mac中選擇了“Use Shared Mono Runtime”或者在VS for Windows中選擇了“Use  Shared Runtime” ,以及 “Fast  Assembly Deployment” (VS for Mac) / “Use Fast Deployment” (VS for  Windows) 選項。

 這些都是調試時的好選擇,因為它們在開發應用程式時會減少建構和部署時間,但是他們根本不擅長建構一個Release版本,因為終端使用者不太可能在他們的Android裝置上安裝一個共享的單運作時,是以應用程式根本就不能運作,因為根本就沒有運作時。對于Release 建構你要禁用這個選項。如果現在在配置中選擇Release版,在頂部下拉,您将看到預設Release版本配置禁用了這些選項。

您可以檢查各個配置的連結器行為:

在VS for Mac: 在Android建構頁面中選擇“Linker”頁籤。你将看到在Debug配置中 “Linking Behaviour”設定為 “Don’t Link” 面在Release配置中設定為 “Link SDK assemblies only” 。

在VS for Windows: 在Android選項頁面中滾動到“Linker Properties” 一節。你将看到在Debug配置中 “Linking” 選項被設定為 “None” 而在Release配置中設定為 “SDK assemblies only”。

這些預設選項允許在調試期間更快地生成,并為您的版本建構提供更小的應用程式包。

在進階頁籤(Mac)/按鈕(Windows)允許你設定當你建構Debug或Release時使用哪種CPUs(ABIs)。請注意,預設情況下Debug配置允許為所有可能的CPUs建構。您建構的每一個CPU都需要時間,是以,精簡這一點可能很好,是以我們隻為CPU建構,我們将運作應用程式。如果我們隻測試x86仿真器,然後我們隻能建立x86和取消選擇其他不需要的Abis。繼續取消選擇所有但x86使用進階選項/按鈕。

祝賀你,您現在剛剛編輯了一個配置。編輯配置就像打開項目選項/屬性一樣簡單,選擇要更改設定的配置,并更改這些設定。

如果調試過程中隻需選擇一個配置,就可以輕松地選擇在哪一個體系結構上建構,這不是很好嗎?如果調試裝置我選擇一個配置,DebugDevice,如果是為模拟器建構,我選擇DebugEmulator。讓我們把那個設定好。

在Visual Studio for Mac中添加一個配置:

在解決方案浏覽器中輕按兩下解決方案來打開解決方案選項。

選擇左側的 Build > Configurations on the left (不是 Run > Configurations).

【Xamarin】揭秘生成配置

因為我們需要Debug配置的變體,在“配置”清單中選擇Debug并單擊“Copy”。這将拷貝目前的Debug設定到你的新配置中。

輸入這個配置的名字,比如DebugDevice。

平台保持預設的Any CPU選項。

點選“OK”。

 在DebugEmulator配置中重複4-8步。

在 Visual Studio (Windows)中添加一個配置:

通過Build > Configuration Manager菜單中,打開配置管理器。

點選Active Solution Configuration下拉框并選擇 “New”。

【Xamarin】揭秘生成配置

在名字字段輸入 DebugDevice。

在 “Copy settings from”下拉清單選擇Debug。

確定選中了 “Create new project configurations” 選項。

【Xamarin】揭秘生成配置

點選OK。

 2 – 6  在名字字段使用ebugEmulator,并重複2 – 6步。

現在,在清單中你将看到四個配置項,Debug, DebugDevice, DebugEmulator, 以及Release。    

【Xamarin】揭秘生成配置
【Xamarin】揭秘生成配置

現在,您隻需打開Android項目選項并對這兩個新配置進行所需的更改:

打開  Android 項目選項。

 選擇Android Build (Mac) / Android Options (Windows) > Advanced 頁籤。

從配置下拉清單選擇DebugDevice.

除了armeabi-v7a之外支援ABIs都取消選擇。

從配置下拉清單選擇DebugEmulator.

除了x86之外所有支援的ABIs都取消選擇。

你可以現在無論何時你想調試使用實際的Android裝置的選擇DebugDevice,你可以當你想調試一個x86模拟器選擇DebugEmulator。您的調試建構會更快,因為您隻為所需的體系結構建構。

祝賀您,現在已經添加了兩個配置,并為特定調試場景設定它們。

我們所做的工作是可行的,但是在裝置或仿真器的建構之間定義平台而不是配置可能更好。您會注意到這是預設的IOS項目。有iOS項目定義兩個平台,iPhone 和iPhoneSimulator。如果我們喜歡,我們也可以這樣做。對于這個練習,開始一個新的Xamarin形式工程,PCL或共享型不該鍛煉。

【Xamarin】揭秘生成配置
【Xamarin】揭秘生成配置

在Xamarin/Visual Studio for Mac添加一個平台:

在解決方案浏覽器中通過輕按兩下解決方案打開解決方案選項。

在左側選擇Build > Configurations  (不是Run > Configurations)。

選擇General 頁籤。

因為我們想要Debug配置的變體,在配置清單選擇Debug并點選 “Copy”.。這将拷貝目前的Debug設定到你的新配置中:

【Xamarin】揭秘生成配置

輸入配置名字,在這個選項中儲存和Debug相同的配置,因為我們隻想添加一個平台而不是一個配置。

在平台字段輸入名字AndroidDevice.

確定 “Create Configurations for all solution items” 選項沒被選中。我們隻需要這個平台的Android項目。如果選擇了這個選項,我們也會将這個平台添加到iOS項目中。

【Xamarin】揭秘生成配置

在名為AndroidEmulator的平台中重複步驟4-8.

因為我們沒有向項目添加這個新平台(步驟7),我們需要在Android項目中重複步驟4-8,Options > Build

> Configurations。為AndroidDevice  和ndroidEmulator 平台都這樣做。

【Xamarin】揭秘生成配置

然後,您必須将解決方案定制平台映射到項目自定義平台:

打開Solution Options > Build > Configurations > Configuration Mappings 頁籤。

在最頂層的平台字段選擇選擇AndroidDevice 平台.

在Android應用項目的配置列,選擇Debug|AndroidDevice。

【Xamarin】揭秘生成配置

在頂端的平台字段選擇AndroidEmulator平台。

在Android應用項目的配置列,選擇Debug|AndroidEmulator.

現在,在主配置下拉清單,你将看到 Debug|AndroidDevice and Debug|AndroidEmulator。

.

【Xamarin】揭秘生成配置

您可以為每一個平台編輯設定,就像之前設定的配置一樣,隻要選擇要編輯平台中的建構設定的正确平台就可以了。在Project Options > Android Build (Mac) 設定頁。

添加自定義平台不直接在Visual Studio是Xamarin Studio。你可以在解決方案級别添加自定義平台的名稱,但它添加在項目層面需要一些編輯的.csproj檔案。 以下是如何在VisualStudio中實作所有這些:

添加解決方案級平台:

通過 Build > Configuration Manager 菜單打開Configuration Manager。

點選Active Solution Platform下拉清單并選擇“New”.

【Xamarin】揭秘生成配置

在名字字段輸入AndroidDevice.

在“Copy settings from”下拉清單選擇AnyCPU。

確定沒有選中 “Create new project configurations” 選項。在Android應用項目沒有選擇一個AndroidDevice平台時,如果選中它,你将會得到一個錯誤。

【Xamarin】揭秘生成配置

在名字字段使用Androidmulator,重複步驟2 – 6。

現在最困難的部分是在Android應用程式項目中添加新的平台。

解除安裝Android應用項目(右擊項目并選擇解除安裝)。

編輯AppName.csproj 檔案(右鍵點選項目并選擇 “編輯.csproj”)。

在打開的項目标記下面粘貼下列XML:

點選(此處)折疊或打開

PropertyGroup Condition=" '$(Platform)' == 'AndroidDevice' ">

  DefineConstants>AndroidDevice/DefineConstants>

  PlatformTarget>AnyCPU/PlatformTarget>

/PropertyGroup>

PropertyGroup Condition=" '$(Platform)' == 'AndroidEmulator' ">

  DefineConstants>AndroidEmulator/DefineConstants>

尋找以下元素:

PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

選擇文本的所有上述PropertyGroup包括開幕式和閉幕PropertyGroup标簽并将它複制。

粘貼文本兩次右下方的propertygroup标簽上面複制的結局。

編輯已粘貼的屬性組,更改:

PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AndroidDevice' ">

上面是針對第一處拷貝的修改,下面是對第二處拷貝的修改

PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AndroidEmulator' ">

不需要,但最好為每個平台單獨outputpath,是以改變:

OutputPath>bin\Debug/OutputPath>

OutputPath>bin\AndroidDevice\Debug/OutputPath>

這是針對第一處拷貝的修改。

OutputPath>bin\AndroidEmulator\Debug/OutputPath>

這是對第二處拷貝的修改。

再次打開Configuration Manager。

為活動解決方案平台選擇AndroidDevice.

Android應用項目的平台列,選擇AndroidDevice。

【Xamarin】揭秘生成配置

為活動解決方案平台選擇AndroidEmulator.

在Android應用項目的平台列選擇AndroidEmulator。

現在你将要開放的Android項目屬性和編輯配置|平台設定,隻有建立相關的體系結構,比如AndroidDevice的armeabi-v7s和AndroidEmulator的x86,就像你簡易的建立一個新配置。

【Xamarin】揭秘生成配置

當我們添加上面的配置時,我勻将它添加到解決方案級别,通過在Mac選擇“Create Configurations for all solution items”和在Windows選擇 “Create

new project configurations”将他們添加到每一個項目中 (或者手動添加它們到.csproj 檔案)。這樣,新配置在項目和解決方案級别上都是可用的。通過在Windows中使用Configuration Manager或者在Mac中使用Solution Options > Build > Configurations >

Configuration Mappings頁籤将映射解決方案級别配置到項目級别配置中。 您将看到,對于每個項目,您可以選擇在配置下拉清單中選擇活動解決方案配置時将建構哪個項目配置。

還可以設定每個解決方案配置生成的項目。如果您有一個多個應用程式項目的解決方案,您可以添加一個配置,隻用于建構當時需要的項目。 

對于Xamarin Forms 應用(或者對于包含多個平台的某些解決方案),您可能需要添加隻建構IOS項目的配置(如果使用了PCL項目),一個隻建構Android項目(如果使用了PCL項目)。這将再次加快建構時間,是以您隻為正在調試的平台建構。

【Xamarin】揭秘生成配置
【Xamarin】揭秘生成配置

我們簡單地接觸的.csproj檔案自UI沒有提供這樣的辦法在Xamarin Studio在Visual Studio應用程式項目中添加自定義平台時。主要是你會不會編輯.csproj檔案但我覺得它是有用的至少接觸的項目.csproj檔案受影響的當你切換活動配置|平台IDE。

當我們添加一個自定義平台之上,我們兩次拷貝和粘貼一個PropertyGroup添加到新平台并且設定新平台的建構輸出路徑。所使用的每個配置的屬性組是一套簡單的MSBuild屬性和值時将使用相應的配置|平台組合選擇建立。例如,下面的屬性組時将使用的Debug|AnyCPU 時選中Configuration|Platform:

...

當遇到條件 '$(Configuration)|$(Platform)' == 'Debug|AnyCPU',然後在那組MSBuild屬性的值将被使用。例如,您會在上面的屬性組中找到下面的内容:

AndroidLinkMode>None/AndroidLinkMode>

這集的連結器選項“None”當使用Debug|AnyCpu Configuration|Platform組合。你的配置和平台的真的隻是一個讓你把一堆MSBuild屬性隻是選擇為你建立一個配置|平台特定的值。如果從指令行生成,您可以手動設定任何可用的MSBuild屬性使用/p:MSBuildProperty=value 文法。換句話說,如果您想從指令行建構Debug|AnyCPU Configuration|Platform 同時還想使用 “Link SDK Assemblies Only”,你将按照如下方式配置(Windows):

MSBuild.exe MySolution.csproj /p:Configuration=Debug /p:Platform=AnyCPU /p:AndroidLinkMode=SdkOnly

…或者在Mac:

MSBuild MySolution.csproj /p:Configuration=Debug /p:Platform=AnyCPU /p:AndroidLinkMode=SdkOnly

你已經學會了如何建立自定義配置平台以及如何編輯,編譯選項你想為一個特定的情況下都可以設定僅僅通過選擇适當的配置|平台組合

繼續閱讀