Submit Search
Upload
Bait and switch
•
Download as PPTX, PDF
•
0 likes
•
471 views
M
m ishizaki
Follow
Bait and Switch を試してみた
Read less
Read more
Software
Report
Share
Report
Share
1 of 39
Download now
Recommended
私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由
m ishizaki
F# で ASP.NET
F# で ASP.NET
m ishizaki
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Joni
俺とモデリング
俺とモデリング
Masayuki KaToH
DataTable
DataTable
m ishizaki
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC apps
Takaaki Suzuki
俺と Ha4go と さくらクラウド
俺と Ha4go と さくらクラウド
Masayuki KaToH
俺と LightSail 概要と使ってみた
俺と LightSail 概要と使ってみた
Masayuki KaToH
Recommended
私が ASP.NET を選ぶ理由
私が ASP.NET を選ぶ理由
m ishizaki
F# で ASP.NET
F# で ASP.NET
m ishizaki
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Joni
俺とモデリング
俺とモデリング
Masayuki KaToH
DataTable
DataTable
m ishizaki
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC apps
Takaaki Suzuki
俺と Ha4go と さくらクラウド
俺と Ha4go と さくらクラウド
Masayuki KaToH
俺と LightSail 概要と使ってみた
俺と LightSail 概要と使ってみた
Masayuki KaToH
RxShowcase -for ignote & i-Jupiter-
RxShowcase -for ignote & i-Jupiter-
Takaaki Suzuki
TypeScriptで作る型安全FirefoxOSアプリ
TypeScriptで作る型安全FirefoxOSアプリ
progre
Fiddler 使ってますか?
Fiddler 使ってますか?
Joni
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
ReactiveSignalR
ReactiveSignalR
Takaaki Suzuki
TypeScript + Express
TypeScript + Express
kamiyam .
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
kamukiriri
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
masayoshi takahashi
マイクロソフト系エンジニアとは何をしている人?
マイクロソフト系エンジニアとは何をしている人?
m ishizaki
酒の肴はC# vNext
酒の肴はC# vNext
Takaaki Suzuki
Casablanca
Casablanca
egtra
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
You&I
C#_GO ABC spring 2017
C#_GO ABC spring 2017
Atsuya Tsuchikawa
5月13日 JapanAndroidGroup - Hamamatsu c# go
5月13日 JapanAndroidGroup - Hamamatsu c# go
Atsuya Tsuchikawa
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
m ishizaki
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
.NET today and tomorrow
.NET today and tomorrow
Akira Inoue
俺とホットキー
俺とホットキー
Masayuki KaToH
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
Reactに触れてみた
Reactに触れてみた
iPride Co., Ltd.
Xamarin.Forms オリジナルタイマーアプリを作ろうハンズオン
Xamarin.Forms オリジナルタイマーアプリを作ろうハンズオン
m ishizaki
XAML Islands その2
XAML Islands その2
m ishizaki
More Related Content
What's hot
RxShowcase -for ignote & i-Jupiter-
RxShowcase -for ignote & i-Jupiter-
Takaaki Suzuki
TypeScriptで作る型安全FirefoxOSアプリ
TypeScriptで作る型安全FirefoxOSアプリ
progre
Fiddler 使ってますか?
Fiddler 使ってますか?
Joni
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
ReactiveSignalR
ReactiveSignalR
Takaaki Suzuki
TypeScript + Express
TypeScript + Express
kamiyam .
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
kamukiriri
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
masayoshi takahashi
マイクロソフト系エンジニアとは何をしている人?
マイクロソフト系エンジニアとは何をしている人?
m ishizaki
酒の肴はC# vNext
酒の肴はC# vNext
Takaaki Suzuki
Casablanca
Casablanca
egtra
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
You&I
C#_GO ABC spring 2017
C#_GO ABC spring 2017
Atsuya Tsuchikawa
5月13日 JapanAndroidGroup - Hamamatsu c# go
5月13日 JapanAndroidGroup - Hamamatsu c# go
Atsuya Tsuchikawa
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
m ishizaki
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
.NET today and tomorrow
.NET today and tomorrow
Akira Inoue
俺とホットキー
俺とホットキー
Masayuki KaToH
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
Reactに触れてみた
Reactに触れてみた
iPride Co., Ltd.
What's hot
(20)
RxShowcase -for ignote & i-Jupiter-
RxShowcase -for ignote & i-Jupiter-
TypeScriptで作る型安全FirefoxOSアプリ
TypeScriptで作る型安全FirefoxOSアプリ
Fiddler 使ってますか?
Fiddler 使ってますか?
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
ReactiveSignalR
ReactiveSignalR
TypeScript + Express
TypeScript + Express
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
マイクロソフト系エンジニアとは何をしている人?
マイクロソフト系エンジニアとは何をしている人?
酒の肴はC# vNext
酒の肴はC# vNext
Casablanca
Casablanca
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
C#_GO ABC spring 2017
C#_GO ABC spring 2017
5月13日 JapanAndroidGroup - Hamamatsu c# go
5月13日 JapanAndroidGroup - Hamamatsu c# go
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
真Intermediate languageのキホン
真Intermediate languageのキホン
.NET today and tomorrow
.NET today and tomorrow
俺とホットキー
俺とホットキー
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Reactに触れてみた
Reactに触れてみた
Similar to Bait and switch
Xamarin.Forms オリジナルタイマーアプリを作ろうハンズオン
Xamarin.Forms オリジナルタイマーアプリを作ろうハンズオン
m ishizaki
XAML Islands その2
XAML Islands その2
m ishizaki
Xamarin で始めるクロスプラットフォーム開発
Xamarin で始めるクロスプラットフォーム開発
m ishizaki
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
m ishizaki
TypeScriptへの入口
TypeScriptへの入口
Sunao Tomita
ngCore engine for mobage platform
ngCore engine for mobage platform
Toru Yamaguchi
新しい EditorConfig (IntelliCode)
新しい EditorConfig (IntelliCode)
m ishizaki
Uno Platform 入門
Uno Platform 入門
m ishizaki
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
m ishizaki
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as Code
Takahisa Iwamoto
DartVM on Android
DartVM on Android
nothingcosmos
広がる .Net
広がる .Net
信之 岩永
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki
7 つの Blazor
7 つの Blazor
m ishizaki
UWPでもDataTable
UWPでもDataTable
m ishizaki
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
Shinichi Hirauchi
Android道第1回公開用
Android道第1回公開用
Takaya Funabiki
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
m ishizaki
C#の書き方
C#の書き方
信之 岩永
Similar to Bait and switch
(20)
Xamarin.Forms オリジナルタイマーアプリを作ろうハンズオン
Xamarin.Forms オリジナルタイマーアプリを作ろうハンズオン
XAML Islands その2
XAML Islands その2
Xamarin で始めるクロスプラットフォーム開発
Xamarin で始めるクロスプラットフォーム開発
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
TypeScriptへの入口
TypeScriptへの入口
ngCore engine for mobage platform
ngCore engine for mobage platform
新しい EditorConfig (IntelliCode)
新しい EditorConfig (IntelliCode)
Uno Platform 入門
Uno Platform 入門
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as Code
DartVM on Android
DartVM on Android
広がる .Net
広がる .Net
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
7 つの Blazor
7 つの Blazor
UWPでもDataTable
UWPでもDataTable
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
Android道第1回公開用
Android道第1回公開用
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
C#の書き方
C#の書き方
More from m ishizaki
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki
Visual Studio を使わず .NET する
Visual Studio を使わず .NET する
m ishizaki
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
m ishizaki
「スタバ」する話
「スタバ」する話
m ishizaki
エンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについて
m ishizaki
Build 2022 / Uno Platform
Build 2022 / Uno Platform
m ishizaki
C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版
m ishizaki
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
m ishizaki
2022 抱負
2022 抱負
m ishizaki
モバイルディスプレイ
モバイルディスプレイ
m ishizaki
Windows フォームアプリ 2022
Windows フォームアプリ 2022
m ishizaki
dotnet tool
dotnet tool
m ishizaki
C#10
C#10
m ishizaki
C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版
m ishizaki
C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内
m ishizaki
C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版
m ishizaki
秋葉原 C# もくもく会
秋葉原 C# もくもく会
m ishizaki
C# Tokyo guide 2020/12/25
C# Tokyo guide 2020/12/25
m ishizaki
C# Tokyo コミュニティ案内 20201217
C# Tokyo コミュニティ案内 20201217
m ishizaki
More from m ishizaki
(20)
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
Visual Studio を使わず .NET する
Visual Studio を使わず .NET する
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
「スタバ」する話
「スタバ」する話
エンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについて
Build 2022 / Uno Platform
Build 2022 / Uno Platform
C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
2022 抱負
2022 抱負
モバイルディスプレイ
モバイルディスプレイ
Windows フォームアプリ 2022
Windows フォームアプリ 2022
dotnet tool
dotnet tool
C#10
C#10
C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内
C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版
秋葉原 C# もくもく会
秋葉原 C# もくもく会
C# Tokyo guide 2020/12/25
C# Tokyo guide 2020/12/25
C# Tokyo コミュニティ案内 20201217
C# Tokyo コミュニティ案内 20201217
Bait and switch
1.
/ 38 Bait and
Switch を試してみた 1 城東.NET #11 2017年08月16日 石崎 充良
2.
/ 38 自己紹介 石崎 充良
( @mishi_cs ) 言語: C# XAML 活動: JXUG (もくもく会) (connpass) 城東.NET Users Group (connpass) .NET 読書会 (connpass) 2
3.
/ 38 概要 3
4.
/ 38 Bait and
Switch とは ・Xamarin で使うライブラリでよく使われている技法。 ・共通コードからは個別のプラットフォームの機能を本来直接呼び出すことができない。 ・これを個共通コードから個別のプラットフォームの機能を直接呼び出しているかのよ うに扱える。 4
5.
/ 38 共通コード? Android、iOS 対応のアプリを作る場合、 通常
3 つのプロジェクトが含まれたソリューションを作る。 ■ ソリューション名プロジェクト 共通のコードを実装するプロジェクト。(コード共有) ■ ソリューション名.Droid プロジェクト Android 用プロジェクト。Android 固有の機能も使える。 ■ ソリューション名.iOS プロジェクト iOS 用プロジェクト。iOS 固有の機能も使える。 5 全てのプラットフォームのプロ ジェクトから参照される。 例えばここから Android 固有の 機能が使われていると、iOS で使 えなくなる。
6.
/ 38 実現方法 6
7.
/ 38 DLL を置き換える ・共通コードではダミーの空実装の
DLL を参照 ・ビルド時に実装の DLL に置き換える ・Plugins for Xamarin (Open Source Components for Xamarin) で使われている 7
8.
/ 38 Plugins for
Xamarin を作ってみよう 8
9.
/ 38 テンプレートの導入 9 https://github.com/xamarin/XamarinComponents 下へスクロール Visual Studio
Plugins Templates からダウンロード ダウンロード
10.
/ 38 プロジェクトの新規作成 10 Plugin for
Xamarin で新規作成
11.
/ 38 出来上がるプロジェクト 4 つのプロジェクトが含まれた ソリューションが作られる 11 CrossFeature1.cs は全てひとつのファイルを参照
12.
/ 38 CrossFeature1.cs 12 共通コード用プロジェクトではダミー実装 プラットフォーム用プロジェクトでは実装を返却
13.
/ 38 インターフェイスに追加 13 メソッドを追加 プラットフォーム用プロジェクトでエラー 実装がプラットフォーム用にしかない
14.
/ 38 それぞれ実装 14 Android 実装 iOS
実装
15.
/ 38 .nuspec ファイルを作成 15 Plugin
for Xamarin NuSpec を選択 名前に注意! 今回は Feature2 を Feature1 に変更
16.
/ 38 .nuspec ファイルを編集 16 <licenseUrl/> <projectUrl/> を削除 <files>
の中の <file> を Core Xamarin.Android Xamarin.iOS を除いて削除
17.
/ 38 nuget.exe をダウンロード 17 https://dist.nuget.org/index.html ダウンロード
18.
/ 38 nuget パッケージを作成 ・.nuspec
ファイルのある場所で、nuget.exe を実行 ■ コマンド ■ 実行結果 18 > Nuget pack
19.
/ 38 作った nuget パッケージを 使ってみよう 19
20.
/ 38 .nupkg ファイルをローカルに保存 もともとローカルにありますが、分かりやすい場所に移動しておく。 20
21.
/ 38 ローカルの .nupkg
を参照 ・ nuget パッケージを探すソースを追加 21 「ソースの構成」を選択 .nupkg ファイルを保存した フォルダーを選択
22.
/ 38 パッケージを選択 22 作ったパッケージを選択
23.
/ 38 nuget パッケージを使う PCL
プロジェクトで nuget パッケージの機能(今回はプロパティの参照)を使用 23 コードビハインドから呼べるよう 名前付け プロパティの値を画面表示
24.
/ 38 実行結果 24 iOS Android
25.
/ 38 nuget パッケージの 内容を見てみよう 25
26.
/ 38 とりあえず .zip
に変えてみて展開 26 共通コードプロジェクト と各プラットフォームのフォルダー 各フォルダーに同じ名前の .dll が含まれる
27.
/ 38 アプリプロジェクト の出力を見てみよう 27
28.
/ 38 全てに同じ名前の DLL
がいる 28 iOS Android 共通プロジェクト
29.
/ 38 DLL を比較してみる ・nuget
パッケージ内の DLL とアプリプロジェクト出力の DLL を比較してみる ・それぞれのフォルダー内の DLL をプラットフォーム毎に比較 (名前はリネーム) ※プラットフォーム間の比較 29
30.
/ 38 つまり ・DLL はビルド時と異なるファイルを実行時に参照できる。 ・共通プロジェクトのビルド時には、空実装の
DLL を参照してビルド ・アプリの実行ファイルの参照先には、プラットフォーム用の DLL を配置 30 共通プロジェクトでは空実装 DLL を使用 アプリのビルド時 (プラットフォームのプロジェクトのビルド時) にはプラットフォーム個別実装の DLL を配置 実行時には個別実装 DLL が使われる
31.
/ 38 コンソール アプリで 試してみよう 31
32.
/ 38 ソリューションの作成 ■ App Dll、DllA、DllB
のいずれも直接参照しないアプリ(Library のみ参照) ■ AppA Library と DllA を参照したアプリ ■ AppB Library と DllB を参照したアプリ ■ Dll 空実装 DLL 役の DLL ■ DllA プラットフォーム用 DLL 役の DLL その1 ■ DllB プラットフォーム用 DLL 役の DLL その2 ■ Library 共通プロジェクト役の DLL 32上記ソリューションは https://github.com/m-ishizaki/BaSに上げてあります。
33.
/ 38 DLL 役の実装 Class1
というクラスに Name というプロパティを実装 33 プロジェクト毎にプロパティの値を変更 Dll では、Dll DllA では、DllA DllB では、DllB
34.
/ 38 共通プロジェクト役 DLL
の実装 Dll の機能を呼び出す 34 DLL の機能を呼び出す 実行時に参照する DLL が変われば値が変わる
35.
/ 38 アプリ役実行ファイルの実装 共通 DLL
の機能を呼び、自身の名前とともに出力 35 DLL の機能を呼び出す 実行時に参照する DLL が変われば値が変わる
36.
/ 38 実行結果 ■ App
の場合 ■ AppA の場合 ■ AppB の場合 36 App.Program Dll AppA.Program DllA AppB.Program DllB 実行時に使われる DLL が変わることが確認できた
37.
/ 38 まとめ 37
38.
/ 38 まとめ ・クラシック デスクトップ
アプリ でも環境ごとの設定の切り替えなどで使えそう 38 Bait and Switch 完璧にマスターした
39.
/ 38 ご清聴ありがとうご ざいました。 39
Download now