MaicrosoftからWindows 10 IoT Raspberry Pi 2用の「Microsoft IoT Samples」ファイルが提供されているが「Blinky」サンプルファイルを開くと「using System;」赤い下線ラインのエラーが出ている状態であった。このままでは、ソース活用並びにビルドが出来ないと思い解決策を見つけましたのでまとめておきます。
なぜ、「using System;」赤い下線ラインのエラーが出ているかと調べた結果、読み込み「参照」ファイルが無くなってしまっていることによるエラーと判明した。
サンプルファイルを制作時には「参照」に「Microsoft.NETCore.UniversalWindowsPlatform」が追加されていたが参照が何らかの原因で壊れてしまってこのような現象になってしまっているのである。
「Microsoft.NETCore.UniversalWindowsPlatform」はUWP用の.NETCoreコンポーネントのことで、これらコンポーネントをNuGetというパッケージ管理システムでインストールすることが可能。
※参考:Maicrosoft Developer Network ドキュメント 壊れた参照のトラブルシューティング
解決策として2つの方法を見つけたので「その1」として記載しておきます。
「参照」に「Microsoft.NETCore.UniversalWindowsPlatform」が認識されていないので再度インストールしなおし認識させる方法をサンプルの「Blinky」にて解説していきます。
ソリューションの中のMainPage.xaml.csを開くと赤い下線ラインのエラー状態です。
ソリューションの参照に再度「Microsoft.NETCore.UniversalWindowsPlatform」認識登録させていきます。
参照を右クリックしNetGetパッケージマネジャー(N)を選択しソリューションのNetGetパッケージの管理(N)...をクリックします。
インストール済みの画面が表示されます。
「Microsoft.NETCore.UniversalWindowsPlatform」がインストール済みですが認識されていなかったことが判明しています。
Microsoft.NETCore.UniversalWindowsPlatform」アンインストールして再度インストールをしなおします。アンインストールをクリックします。
変更の確認ダイアログが表示されますがそのまま「OK」をクリックします。
インストール済み画面からアンインストールされました。
次に再度インストールをします。参照画面から「Microsoft.NETCore.UniversalWindowsPlatform」を検索すると表示されますので「インストール」ボタンをクリックします。
変更の確認画面が表示されます。そのまま「OK」をクリックします。
ライセンスへの同意を求められます。そのまま「同意する」をクリック。
インストールが完了するとソリューションの参照に「Microsoft.NETCore.UniversalWindowsPlatform」が追加されます。
ソリューションの中のMainPage.xaml.csを開くと赤い下線ラインのエラー状態は解決されています。
「その2」では、エラー状態のままでビルドして解決していますのでその内容をまとめて掲載しています。
Visual Studio 2015 C# のソース記述
Blinky
using System;
using Windows.Devices.Gpio;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Media;
namespace Blinky
{
public sealed partial class MainPage : Page
{
//private const int LED_PIN = 5;
private const int LED_PIN = 47;
private GpioPin pin;
private GpioPinValue pinValue;
private DispatcherTimer timer;
private SolidColorBrush redBrush = new SolidColorBrush(Windows.UI.Colors.Red);
private SolidColorBrush grayBrush = new SolidColorBrush(Windows.UI.Colors.LightGray);
public MainPage()
{
InitializeComponent();
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(500);
timer.Tick += Timer_Tick;
InitGPIO();
if (pin != null)
{
timer.Start();
}
}
private void InitGPIO()
{
var gpio = GpioController.GetDefault();
// Show an error if there is no GPIO controller
if (gpio == null)
{
pin = null;
GpioStatus.Text = "There is no GPIO controller on this device.";
return;
}
pin = gpio.OpenPin(LED_PIN);
pinValue = GpioPinValue.High;
pin.Write(pinValue);
pin.SetDriveMode(GpioPinDriveMode.Output);
GpioStatus.Text = "GPIO pin initialized correctly.";
}
private void Timer_Tick(object sender, object e)
{
if (pinValue == GpioPinValue.High)
{
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
LED.Fill = redBrush;
}
else
{
pinValue = GpioPinValue.High;
pin.Write(pinValue);
LED.Fill = grayBrush;
}
}
}
}
コメントをお書きください