Visual Studio のアップデート 16.1.4 がリリースされました。 Show
■ 更新内容問題の解決
これらの問題を踏んでいた方には重大なアップデートです。これらか踏むかもしれませんし、とりあえず皆さんアップデートしましょう。 ■ 更新方法Visual Studio の更新はメニューの ■ C# もくもく会C# もくもく会 #88 を開催しました。 C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。 ■ 今週の成果発表今週は、進捗の日でした
ちなみにこの勉強会ですが、実は公序良俗に反しなければどのような技術を扱っても大丈夫です。そもそも C# エンジニアが C# だけしか使わないというわけではありませんし。 ■初心者歓迎このもくもく会には、入門者の方も多くご参加いただいています。 突然 C# やらなければならなくなって途方に暮れている方、何となく C# をやってきたけど改めて見直してみたい方なども大歓迎です。 特に C# で課題をお持ちでなくても是非遊びに来てください。 ■ 目指す勉強会スタイル世界一敷居の低い勉強会を目指しています。
そんなスタイルでやっています。 ■ 次回予定次回は 2019/06/27 に開催予定です。 C# に関心のある方、是非遊びに来てください。 ■ 城東.NET城東.NET #33 を開催しました。 城東.NET は東京の最近は秋葉原で毎月第3水曜日に開催している .NET 系の勉強会です。 私は ARCore というタイトルで話をしました。 Pixel 3a を買ったのでこれまで持ってた Android 端末では対応していなかった機能を試してみた内容です。 ■ 次回予定来月は 07月17日(水)に開催の予定です。 .NET に関心のある方、是非遊びに来てください。 これまでそれなりに Android も使ってきたつもりですが、Pixel 3a のスクリーンショットを有線で Windows PC で取り出そうとして悩みました。 ■ 写真で解説ヘルプの通りにやれば、PC から Pixel が外部ストレージとして見えるようになるのですが、文章だけで記憶に残りづらい気がしたので写真を貼っておきます。 手順
これでこれまでの Pixel 内のファイルが PC から見えるようになりました。スマートフォン使いこなすのむずしいです。 Visual Studio for Mac で次のエラーが出て NuGet パッケージがインストールできないことがありました。 Unable to get repository signature information for source https://api.nuget.org/v3-index/repository-signatures/4.7.0/index.json. 現象が発生したプロジェクトは新規作成したばかりの Xamarin.Android プロジェクトです。 ■ 解消ソリューションを一度閉じて、開くと NuGet パッケージがインストールできるようになりました。 エラーメッセージをネット検索してみるとVisual Studio で同じエラーメッセージ、同じインストールできない現象の情報があります。 Visual Studio for Mac もちゃんと Visual Studio してるんですね。 ■ C# もくもく会C# もくもく会 #87 を開催しました。 C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。 ■ 今週の成果発表今週も、準備の日でした
ちなみにこの勉強会ですが、実は公序良俗に反しなければどのような技術を扱っても大丈夫です。そもそも C# エンジニアが C# だけしか使わないというわけではありませんし。 ■初心者歓迎このもくもく会には、入門者の方も多くご参加いただいています。 突然 C# やらなければならなくなって途方に暮れている方、何となく C# をやってきたけど改めて見直してみたい方なども大歓迎です。 特に C# で課題をお持ちでなくても是非遊びに来てください。 ■ 目指す勉強会スタイル世界一敷居の低い勉強会を目指しています。
そんなスタイルでやっています。 ■ 次回予定次回は 2019/06/20 に開催予定です。 C# に関心のある方、是非遊びに来てください。 先日、毎日チェックしている RSS で次の記事を見つけました。 WPF と WinForms の .NET Core 3.0 移行記事です。とても関心のある話題なのでなぞってやってみました。 ■ 簡単な例/難しい例今回の記事はサードパーティの UI コンポーネントなどに存じていない小規模なアプリを移植する例とのことです。 ■ 手順の概要長い記事ではないですが、分かっている人向けに手順の概要をこれだけで完全に理解した方はこの先は読まなくて大丈夫だと思います。
簡単なお仕事です。 ■ 今回移植してみるアプリWPF で UI にはボタンが一つあるだけ、クリックするとメッセージボックスを表示するだけのアプリです。 using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { var ac = System.IO.File.GetAccessControl(@"nanika fairuno pasu"); MessageBox.Show(ac.ToString()); } } <Window xClass="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlnsx="http://schemas.microsoft.com/winfx/2006/xaml" xmlnsd="http://schemas.microsoft.com/expression/blend/2008" xmlnsmc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlnslocal="clr-namespace:WpfApp1" mcIgnorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Button Content="Button" Click="Button_Click"/> </Grid> </Window> 敢えて .NET Core 3.0 で使えない System.IO.File.GetAccessControl メソッドを書いています。このメソッドがどうなるかも確認してみます。 ■ .NET Portability Analyzer で、パッケージ/API が .NET Core で使えるか確認する元記事内に書かれているダウンロードリンクから .NET Portability Analyzer をダウンロードします。zip ファイルがダウンロードされるので展開して中の .exe を実行します。 Browse ボタンから選択またはテキストボックスへの入力で移行したいアプリのあるフォルダを設定します。設定するのは移行したいアプリの .exe ではなく .exe のあるフォルダです。解析結果は Excel で作成されます。作成される場所は一時フォルダなのであとでまた見たいならばどこかに移動して置くと良いと思います。 解析結果の Excel ファイル C 列が解析の結果です。使っている API がすべて .NET Core で使えるなら 100。使えない API が使われていと 100 より小さくなります。 おススメの置き換え先 API がある場合は、Recommended changes 列に置き換え先の API を挙げてくれることもあるようです。 ■ packages.config を PackageReference 形式に変更するプロジェクトの中に packages.config ファイルがある場合、ソリューションエクスプローラで packages.config ファイルを ポップアップで OK を選択します。 これで packages.config ファイルがなくなり、パッケージの情報が PackageReference 形式で .csproj ファイルに追加されます。 ■ .csproj を SDK スタイルに書き換えるここの手順が複雑です。ここでプロジェクトをいったんアンロードします。アンロードすると .csproj ファイルが編集できるようになります。ソリューションエクスプローラで プロジェクト名を プロジェクトがアンロード済みになったらプロジェクト名を ここで、一番間違えやすい手順が出てきます。 .csproj を SDK スタイルにするエディタで開いている .csproj の内容をすべて消して、次のコードを貼り付けます。 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project> 続けて、インストールパッケージやプロジェクトの参照の設定を戻します。【β1】から次の様な記述を探し、【α1】に追加します。 <ItemGroup> <PackageReference Include="EntityFramework"> <Version>6.2.0</Version> </PackageReference> <PackageReference Include="Newtonsoft.Json"> <Version>12.0.2</Version> </PackageReference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj"> <Project>{ca473fbd-a849-4b86-a427-5cbc9101c5c8}</Project> <Name>ClassLibrary1</Name> </ProjectReference> </ItemGroup> ここで、【β1】の中の <ProjectReference 要素の子要素の <Project および <Name 要素は SDK スタイルでは不要なので削除します。削除後は次のようになります。 <ItemGroup> <PackageReference Include="EntityFramework"> <Version>6.2.0</Version> </PackageReference> <PackageReference Include="Newtonsoft.Json"> <Version>12.0.2</Version> </PackageReference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /> </ItemGroup> SDK スタイルへの移行完了ここまでの手順で 【α1】は次のようになりました。 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> <ItemGroup> <PackageReference Include="EntityFramework"> <Version>6.2.0</Version> </PackageReference> <PackageReference Include="Newtonsoft.Json"> <Version>12.0.2</Version> </PackageReference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /> </ItemGroup> </Project> アンロードしていたプロジェクトをロードします。ソリューションエクスプローラでプロジェクト名を
■ ターゲットフレームワークを .NET Core 3.0 に変更するここまでの手順で、.NET Core 3.0 へ移行する準備は整いましたが、実はまだ .NET Framework で動作しています。実際ビルドも実行もできます。.NET Portability Analyzer で .NET Core 3.0 で使えないとされた System.IO.File.GetAccessControl メソッドも元気に動作します。 .NET Core 3.0 に変更するためにまた【α1】を編集します。SDK スタイルだとプロジェクトをアンロードしなくても編集ができるようになります。 選択するメニュー項目の文言が違うことに気を付けてください。 編集 (プロジェクト名).csproj という文言を探しても見つかりません! 注意!!。 【α1】の中に
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> <ItemGroup> <PackageReference Include="EntityFramework"> <Version>6.2.0</Version> </PackageReference> <PackageReference Include="Newtonsoft.Json"> <Version>12.0.2</Version> </PackageReference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /> </ItemGroup> </Project> ■ .NET Core 3.0 でビルド簡単なお仕事で .NET Core 3.0 に移植できたので、ビルドしてみます。 エラー CS0117 'File' に 'GetAccessControl' の定義がありません みごと! コンパイルエラーがでます!! 大丈夫、計画通りです。 ■ 使えないアイツを削除.NET Portability Analyzer で Not Supported とされていた System.IO.File.GetAccessControl メソッドが本当に使えないことを確認するために残していたことを覚えているでしょうか? using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { } } これでビルドも通って無事実行できました。 ■ Microsoft.Windows.Compatibilityビルドは通り実行できましたが、機能を減らしてしまいました。こんな時は Microsoft.Windows.Compatibility パッケージに命を救われることがあるそうです。NuGet からインストールしてください。このパッケージは、.NET Framework に有った 21K の API を追加してくれるそうです。 static FileSecurity System.IO.FileSystemAclExtensions.GetAccessControl(this FileInfo fileInfo) 拡張メソッドが含まれています。これを使って先ほど削除した機能を復活させましょう。ちなみにこのメソッドは .NET Framework に存在しているメソッドです。 using using System.Windows; using System.IO; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { var ac = new System.IO.FileInfo(@"nanika fairuno pasu").GetAccessControl(); MessageBox.Show(ac.ToString()); } } これでビルドも通って機能も削除せず無事実行できました。デスクトップアプリの .NET Core 3.0 移植、完全に理解しました。 |