nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Visual Studio and Development Technologies。なお掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Prism 6.3の変更点 その1 Pris.Core

Prism 6.3がリリースされてからすでに2カ月。書こう書こうと思っていたのですが、後回しにしまくっていたのでここに変更点をまとめます。
for Xamarin.Formsの範囲が対象となります。

と、言っておきながら、本エントリーではWPFおよびUWPとも共通のPrism.Coreの変更点です。
なお変更点の詳細は、次の記事と実際のソースの変更に基づいています。

http://brianlagunas.com/prism-6-3-release/
https://github.com/PrismLibrary/Prism/wiki/Release-Notes-6.3.0

続きを読む

.NET StandardプロジェクトでInternalsVisibleToを設定する方法

.NETには、例えばinternalなクラスやメソッドのUnitTestをUnitTestプロジェクトから呼び出す仕組みとして、「InternalsVisibleTo」という属性があります。
従来の.NET Frameworkプロジェクトでは、プロジェクト作成時にPropertiesの下にAssemblyInfo.csが作成されその中に定義する方法が一般的でした。
しかし、.NET StandardにはAssemblyInfo.csが存在しません。

f:id:nuitsjp:20170614143527p:plain

ここでは.NET StandardプロジェクトでInternalsVisibleToを設定する方法を紹介します。

続きを読む

Xamarin.Forms用の汎用Behaviorライブラリをリリースました

Xamarin.Forms用の汎用Behaviorライブラリをリリースました!

www.nuget.org

コード&詳細ドキュメント(まだ下記中ですが)はこちらにあります。

github.com

たとえば、こんな感じでイベント発生時にEventのパスを指定してEventのプロパティを引数にCommandを実行したり

<ListView ItemsSource="{Binding Fruits}">
    <ListView.Behaviors>
        <behaviorsPack:EventToCommandBehavior
            EventName="ItemTapped"
            Command="{Binding SelectedFruitCommand}"
            EventArgsPropertyPath="Item"/>
    </ListView.Behaviors>
public ICommand SelectedFruitCommand => new Command<Fruit>(fruits =>
{
    ...
});

こんな感じで、ボタンクリック時に確認ダイアログを表示してからCommandを実行したり

<Button Text="Show Display Alert">
    <Button.Behaviors>
        <behaviorsPack:DisplayAlertBehavior
            EventName="Clicked"
            Title="Alert Title"
            Message="Please select either."
            Accept="OK"
            AcceptCommand="{Binding AcceptCommand}"
            Cancel="Cancel""/>
    </Button.Behaviors>
</Button>

Behavior作成時の基底クラスもいくつか用意しています。例えば親のBindingContextを継承するInheritBindingBehaviorとか。

色々便利です。多分。

良かったら使っていただけると嬉しいです。
ご要望はぜひIssueへ!

.NET StandardプロジェクトをxUnitでテストする方法

.NET Standardのプロジェクトをテストするために、.NET Standardのテストプロジェクトを作成するとxUnitのテストが認識されずテストできません。
現状ではつぎのようにすることで対応できます。

  • Testプロジェクトを.NET Coreのコンソールアプリケーションとして作成する
  • NuGetからつぎのパッケージを追加する
    • Microsoft.NET.Test.Sdk 15.0.0
    • xunit 2.0.0
    • xunit.runner.visualstudio 2.0.0

これで.NET Standardのプロジェクトのテスト自体はできます。
しかし、その.NET StandardのプロジェクトがPCLライブラリ(Xamarin.Formsなど)を参照していたりすると、もうひと手間必要です。

.csprojをメモ帳などで開いて、PackageTargetFallbackを追記してあげてください。手で。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PackageTargetFallback>$(PackageTargetFallback);portable-win+net45+wp8+win81+wpa8</PackageTargetFallback>
  </PropertyGroup>

これでいけるはずです。