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つ目の「その2」として記載しておきます。
「参照」に「Microsoft.NETCore.UniversalWindowsPlatform」が認識されていないのでこのままの状態でビルドして自動補完させる方法をサンプルの「Blinky」にて解説しています。
ソリューションの中のMainPage.xaml.csを開くと赤い下線ラインのエラー状態です。
それでは、「参照」に「Microsoft.NETCore.UniversalWindowsPlatform」が認識させるためにこのままの状態でビルドして自動補完させます。緑の三角マークのシュミレーターをクリックします。
ビルドが完了し「Blinky」のシュミレーターが表示されます。
ビルドを停止します。
ソリューションの中のMainPage.xaml.csを開くとソリューション内に「Microsoft.NETCore.UniversalWindowsPlatform」が自動補完され「using System;」赤い下線ラインのエラーも消えています。これで完了です。
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;
}
}
}
}
コメントをお書きください