【Xamarin】トラブルとその対策

 
 

「現在のコンテキストに 'DisplayAlert' という名前は存在しません」というエラーが出てしまう

環境

  • Windows10
  • Visual Studio 2017 

 

エラー詳細

基本的には「using Xamarin.Forms;」が定義されていれば未定義エラーは起きない。
従って、作成したクラスが Xamarin のクラスを継承していないことが原因の場合がある。
 

エラー対策

以下の対策例は一例である。

    namespace SQLiteSample
    {
-    class SamplePage
+    class SamplePage : ContentPage
      {
        readonly SqliteControl wSqliteControl = new SqliteControl();
        public SamplePage()
        {
          // データ表示用リスト

 
 
 

Android のビルド時に「androidmanifest file does not exist」というエラーが表示される

環境

  • Windows10
  • Visual Studio 2017 

 

エラー詳細

【Xamarin】【book】「Xamarin エキスパート養成読本」の学習記録(7) [特集4 - 第2章] - 4f938672-cb1c-4c5a-8233-192c4ec901df の実装完了後にビルドを実行すると「androidmanifest file does not exist」というエラーが発生した。
 

対策方法

Android プロジェクトで右クリックをしてプロパティを選択し、以下のリンクをクリックする。
f:id:dnkrnka:20181118214744p:plain
 
次に「Androidマニフェスト」画面が表示されるので必要事項を入力する。
下記はデフォルト値であり、自動的に入力されたものである。
f:id:dnkrnka:20181118214928p:plain
 
その後、以下のようにマニフェストファイルが作成されていれば良い。
f:id:dnkrnka:20181118215104p:plain
 
 
 

Android のビルド時に「XXXX.Android\Properties\AssemblyInfo.cs' が見つかりませんでした」というエラーが出る

 

エラー原因

恐らくだが、プロジェクトのフォルダ毎コピーした影響でエラーが出たものかと思われる。
通常は以下のように AssemblyInfo.cs が存在している。
f:id:dnkrnka:20181118222126p:plain:w400
 

AssemblyInfo.cs

基本的には次のようなコードが Visual Studio により生成されるので、存在しないということはプロジェクトの作成方法に不整合が生じているということかと思う。

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SQLiteSample.Android")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SQLiteSample.Android")]
[assembly: AssemblyCopyright("Copyright ©  2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

// Add some common permissions, these can be removed if not needed
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]

 
 
 

UWP のデザイナが表示されない

VS 2017 で xaml ソースは開けるもののデザイナが表示されない、という問題の対策。
 

対策方法

以下のように xaml ファイルを開いているときに、赤枠アイコンをクリックすれば良いだけ。
f:id:dnkrnka:20181117195311p:plain
 
 
 
 

「There is not enough storage space on the device to store package: /data/local/tmp/com.companyname.ScrollViewSample-Signed.apk. 」というエラーが出てしまう

ビルドは通ったものの、Android シミュレータを起動させようとすると下記のようなエラーが発生し起動しない。

環境

  • Windows10
  • Visual Studio 2017 

 

エラー詳細

重大度レベル	コード	説明	プロジェクト	ファイル	行	抑制状態
エラー		ADB0060: There is not enough storage space on the device to store package: /data/local/tmp/com.companyname.ScrollViewSample-Signed.apk. Free up some space and try again.
   場所 Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) 場所 E:\A\_work\157\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:行 320
   場所 Mono.AndroidTools.AndroidDevice.<>c__DisplayClass94_0.<InstallPackage>b__0(Task`1 t) 場所 E:\A\_work\157\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:行 746
   場所 System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
   場所 System.Threading.Tasks.Task.Execute()		 	0	

 

エラー原因

シミュレータ用の空き領域不足。下記の「対策」の方法でスペースを拡張することで解決した。
 

対策

1. Visual Studio 2017 の「ツール」-「Android」-「Android デバイスマネージャ」をクリックする。
f:id:dnkrnka:20181117165524p:plain:w600
 
2. 該当デバイスの「disk.dataPartition.size」の値を大きくする。(下図は 800M から 8000M に変更したところ)
 
3. 「保存」を押す
f:id:dnkrnka:20181117170656p:plain:w600