Xamarin.Forms 3.0 とVS2017 7.5.1でIntellisenseに問題

Google AdmobのアップデートがNuGetにリリースされて、コンパイルが通るようになった矢先、VSを7.5.1と、Xamarin.Forms 3.0もアップデート。そのあたり(今朝)から、Xamarin.FormのInitializeComponent();とXamarin.Formsのコントロール名に赤い下線が表示されて、Intellisense が表示されなくなっている。ビルドもデバッグも問題なし。

検索するも、Windows版では現象は出ているが、Mac版はまだ報告されていないようだ。

今の所、XamlでUIを手で書いているのでXamlで書いたコントロール名(x:Name)にIntelliSenseが出ないと、パラメータが全く分からない。アプリの起動時に、コードでコントロールクラスを作る場合は問題はない。(クラス名でコントロールを明示的にコード上に宣言されているからか)

もう少し、サーチしてみるか。

Intellisense not working in Xamarin.Forms 3.0

追記:

さらにサーチした結果、GitHubと、Xamarinのオフィシャルページにも現象は確認されているが、解決策は発見できず。

GitHub: Updating to Visual Studio Community 7.5 causes ambiguous resource layouts #1670

Xamarin: Intellisense (C#) not working for XAML objects?

Microsoft: IDE displaying “Ambiguity” errors but still builds and runs correctly

リンクは相互リンクされています。

どこかのサイトで見たやり方ですが、Visual Studio(VS)の起動時にファイルが作られていない場合、Code BehindをVSが作ります。

作られるファイルは、プロジェクト名/obj/Debug/MyPage.xaml.g.csで、この中に Xamlのコントロールをコードで作る宣言が書かれています。すでにファイルがある場合は、そのファイルを引き継いで設定を継続します。このファイルには、Xamarin.Formsのバージョン情報が書かれています。

[global::System.CodeDom.Compiler.GeneratedCodeAttribute(“Xamarin.Forms.Build.Tasks.XamlG”, “2.0.0.0”)]
private global::Xamarin.Forms.Label countLabel;

[global::System.CodeDom.Compiler.GeneratedCodeAttribute(“Xamarin.Forms.Build.Tasks.XamlG”, “2.0.0.0”)]
private global::Xamarin.Forms.Button continuousReadButton1;

この時点で気が付いたのですが、Xamarin.Formsを3.0にアップしたのに、”2.0.0.0″と書かれています。どうやら、VSのアップデートでは、Xamarin.Formsの3.0のアップデートは見込まれてず、テストしていなかったのでしょうか。

結果、新しいプロジェクトを作って、Xamarin.Formsのバージョンを、2.5.1.527436に戻したところ、IntelliSenseが元に戻りました。Xamarin.Formsのダウングレード時には、VSの再起動が必要です。(再起動しないとXamarin.Formのバージョンが一致しないとのことでコンパイルエラーになってしまう)

以下は、元のソースで使われていたRevertしたpackages.configファイルの内容。やはり3.0のアップデートでおかしくなっていたようだ。

<?xml version=”1.0″ encoding=”utf-8″?>
<packages>
<package id=”Newtonsoft.Json” version=”11.0.2″ targetFramework=”portable45-net45+win8+wpa81″ />
<package id=”Xamarin.Forms” version=”2.5.1.527436″ targetFramework=”portable45-net45+win8+wpa81″ />
</packages>

もう一つ、VS7.5ではこのPackage.configファイルは廃止されているようで、プロジェクトを新規で作った時には、プロジェクトファイル内に書かれている。

<ItemGroup>
<PackageReference Include=”Xamarin.Forms” Version=”2.5.1.527436″ />
<PackageReference Include=”Xam.Plugins.TextToSpeech” Version=”3.3.2″ />
</ItemGroup>

自分のメモ書きなので、わかる人にしか分からなさそうですが、Xamarin.Forms3.0ではIntellisenseが動かないというところでしょうか。

しかし、Xamarin.Forms 3.0 のアップデートのデモも公開されていたけれど、これじゃまだまだ使えぬ。

結局、このIntelliSenseの一件で今のプロジェクトを作り直すことにした。VS7.5.1ではPCLのターゲットも、netstandard2.0にデフォルトで設定され単純化されているので、そちらに移行してソースコードを移行してテストをすることにする。

メインのソースリポジトリも作り直すことにする。

 

One reply

  1. info@nsw.main.jp より:

    自己レス。この問題は、7.5.2 (build40) で修正されていることを確認しました。
    それと今日現在(6月20日)7.5.3がリリースされているようです。これからインストールします。

Comments are closed.