sgunji’s blog

ものづくりやプログラミングなど…最近はXamarinを少々

IDE0006エラー

Xamarinを使っていてエラーが出たので備忘録として・・・

〇重大度レベル
警告
〇コード
IDE0006
〇説明
プロジェクトの読み込み中にエラーが発生しました。失敗したプロジェクトとそれに依存するプロジェクトの完全なソリューション解析など、一部のプロジェクト機能が使用できなくなりました。
〇プロジェクト***** ファイル
〇行1
〇抑制状態
アクティブ
〇詳細の説明
この問題の原因を確認するには、次をお試しください。

1. Visual Studio を閉じる
2. Visual Studio 開発者コマンド プロンプトを開く
3. 環境変数 "TraceDesignTime" を true に設定する (set TraceDesignTime=true)
4. .vs directory/.suo ファイルを削除する
5. 環境変数 (devenv) を設定したコマンド プロンプトから VS を再起動する
6. ソリューションを開く
7. 'C:\Users\******\AppData\Local\Temp\\******_*.designtime.log' を確認し、失敗したタスク (FAILED) を探す

Xamarin.FormsのMasterDetailPageのテンプレートについて

Xamarinのテンプレートを見ているとデフォルトでDetailPageを発見!

PCLプロジェクトを右クリックして,【新しい項目を追加】から
f:id:sgunji:20170325130719p:plain

適当に名前を付けて追加しますと,必要なものが勝手にできてしまう!!

  • (適当につけた名前).xaml
  • (適当につけた名前)Detail.xaml
  • (適当につけた名前)Master.xaml
  • (適当につけた名前)MenuItem.cs

が自動生成されます。

f:id:sgunji:20170325131115p:plain

App.Xaml.csを修正して,

public App()
{
     InitializeComponent();
     //MainPage = new NavigationPage( new App8_PCL.MainPage());
     MainPage = new DetailPage1();
}

ビルドすると・・・

CS0101エラーが発生し,名前空間が重複しているといわれます。

下記リンクによると,これはテンプレートのバグらしい。

forums.xamarin.com

優秀な世界のプログラマーに従って修正が必要です。

まず,作成された

  • DetailPage1.xaml.cs
  • DetailPage1Detail.xaml.cs
  • DetailPage1Master.xaml.cs
  • DetailPage1MenuItem.cs

名前空間を直します。

それぞれのソースの名前空間
(プロジェクト名).(適当につけた名前)
となっているので,
(プロジェクト名)のみに直します。

修正前・・・

namespace (プロジェクト名).DetailPage1

修正後・・・

namespace (プロジェクト名)

また,.DetailPage1Master.xaml.cs

class DetailPage1MasterViewModel : INotifyPropertyChanged
{
   public ObservableCollection<DetailPage1MenuItem> MenuItems { get; }
   public DetailPage1MasterViewModel()
   {
      DetailPage1MenuItems = new ObservableCollection<DetailPage1MenuItem>(new[]
      {
          new DetailPage1MenuItem { Id = 0, Title = "Page 1" },
          new DetailPage1MenuItem { Id = 1, Title = "Page 2" },
          new DetailPage1MenuItem { Id = 2, Title = "Page 3" },
          new DetailPage1MenuItem { Id = 3, Title = "Page 4" },
          new DetailPage1MenuItem { Id = 4, Title = "Page 5" },
          });
      }
      public event PropertyChangedEventHandler PropertyChanged;
      void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));


}

の部分の

DetailPage1MenuItems = new ObservableCollection<DetailPage1MenuItem>(new[]{...}

ObservableCollection<DetailPage1MenuItem> DetailPage1MenuItems = new ObservableCollection<DetailPage1MenuItem>(new[]{...}

に修正します。

これで修正完了です。
ビルドしてみましょう。

f:id:sgunji:20170325135607g:plain

ただし,このままだとAndroid版はbackキーを押したときエラーで落ちます。

forums.xamarin.com

Xamarin.Formsのバージョンを2.3.4系に上げるといいようなので,
一番(投稿時)新しいのは2.3.4.214-pre5なので,これをインストール
ソリューションをクリーンした後,ビルドするとbackキーエラーも回避できるようです。

Could not load assembly Windows.Foundation.UniversalApiContractというビルドエラー

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Windows.Foundation.UniversalApiContract, Version=3.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
ファイル名 'Windows.Foundation.UniversalApiContract.dll' です。'Windows.Foundation.UniversalApiContract.dll'
場所 Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters)
場所 Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(DirectoryAssemblyResolver resolver, ICollection`1 assemblies, AssemblyDefinition assembly, Boolean topLevel)
場所 Xamarin.Android.Tasks.ResolveAssemblies.Execute(DirectoryAssemblyResolver resolver)

というメッセージが出てビルドエラーが発生。
突然ビルドできなくなりましたが,


forums.xamarin.com

上記を参照すると,どうやらWindows.Storageが悪さしているよう。

Xamarin.Formsにおいてシリアライズしたデータを読み込むときにDependencyServiceを使って読み込もうとしているのですが,その際に誤ってAndroidプロジェクトにFileInputStreamを使ったのが間違い。

Intellisenseが効いたので使えるものと思っていましたが,なんと使えないとは!!

Android.Views.InflateExceptionについて

Xamarinで何回かデバッグしているうちに

 

Android.Views.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class android.support.v7.widget.Toolbar

 

というメッセージが出て困りました。

 protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);//<-ここで止まっちゃう

            global::Xamarin.Forms.Forms.Init(this, bundle);

            var app = new App();
            LoadApplication(app);

        }

teratail.com

上記を参考に何回かバージョンを落として,アップデートしてを繰り返しましたが,なおらず・・・。

Androidの参照を除いてみると

  • System.ObjectModel

に黄色い三角が表示されていました。



f:id:sgunji:20170306123742p:plain

NuGetパッケージの復元ってやったらできました!