--- lang: ja-jp breaks: true --- # .NET Framework 4.7.2 から .NET Core 6.0 への移行 2021-08-12 ## Microsoft.VisualBasic 以下のコードはWindowsでのみ実行可能 ```csharp= Strings.StrConv(strConv, VbStrConv.Hiragana, VisualBasicUtil.LocaleId_Japanese) ``` 以下に変更 ```csharp= using CSharp.Japanese.Kanaxs; KanaEx.ToHiragana(strConv); ``` ## Thread.SetApartmentState Windowsアプリでは使用したいので、以下のように変更。 ```csharp= Thread thread = new Thread(() => act()); thread.TrySetApartmentState(ApartmentState.STA); ``` :::warning この対応で問題ないか、後日検証する。 ::: ## System.Deployment.Application 以下の処理は利用できないので、プリプロセッサで分岐。 ※ClickOnceは利用しなくなるはずなので、この処理は不要。 ```csharp= #if !NET using System.Deployment.Application; if (ApplicationDeployment.IsNetworkDeployed) { // 現在のバージョンを取得。 ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment; strDeploymentVersion = deploy.CurrentVersion.ToString(); } #endif ``` ## Microsoft.JScript `Microsoft.JScript.JScriptCodeProvider`は利用できなくなるので、ClearScriptに移行。 > microsoft/ClearScript > https://github.com/microsoft/ClearScript ## System.Management.ManagementObjectSearcher `System.Management.ManagementObjectSearcher`は、Windowsでのみ利用可能。 ## log4net `App.config`に記述していた設定を、`log4net.config` に変更。 ```csharp= [assembly: log4net.Config.XmlConfigurator(Watch = true)] ``` を ```csharp= [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] ``` に変更。 :::info `"log4net.config"`の部分は、.NET framework時代の`App.config`を使用しても動作する。ただし、該当ファイルのプロパティを、`新しい場合はコピーする`に変更すること。 ::: ## System.Runtime.InteropServices Windowsでのみ利用可能。 ## System.Diagnostics Windowsでのみ利用可能。 ## `Thread.GetDomain().DefineDynamicAssembly()` ```csharp= #if NET var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName { Name = name }, AssemblyBuilderAccess.Run); //NOTE: to save, use RunAndSave #else var assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(new AssemblyName { Name = name }, AssemblyBuilderAccess.Run); //NOTE: to save, use RunAndSave #endif ``` ## System.IO.Ports Windowsでのみ利用可能。 ## Windowsのみで実行される前提のプロジェクトは、csprojの設定を変更し、`AssemblyInfo.cs`に属性を追加する。 ![](https://i.imgur.com/yBT4pAX.png) ```xml= <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports> <AssemblyName>XXXXXXXX</AssemblyName> <RootNamespace>XXXXXXXX</RootNamespace> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>XXXXXXXX.snk</AssemblyOriginatorKeyFile> </PropertyGroup> ``` ↓ ```xml= <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0-windows</TargetFramework> <DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports> <UseWindowsForms>true</UseWindowsForms> <UseWPF>true</UseWPF> <AssemblyName>XXXXXXXX</AssemblyName> <RootNamespace>XXXXXXXX</RootNamespace> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>XXXXXXXX.snk</AssemblyOriginatorKeyFile> </PropertyGroup> ``` `<GenerateAssemblyInfo>false</GenerateAssemblyInfo>`と設定している場合は、以下の属性を追加する。 ```csharp= #if WINDOWS [assembly: System.Runtime.Versioning.TargetPlatform("Windows7.0")] [assembly: System.Runtime.Versioning.SupportedOSPlatform("Windows7.0")] #endif ``` ## Sgry.Azuki > Azuki テキストエディタエンジン > https://azuki.osdn.jp/ > Azuki > https://ja.osdn.net/projects/azuki/ 以下のモジュールが`.net core`で動作するかも > kkato233/azuki > https://github.com/kkato233/azuki ## System.Windows.Forms.DataGrid > .NET Core 3.0 および 3.1 における Windows フォームでの破壊的変更 > https://docs.microsoft.com/ja-jp/dotnet/core/compatibility/winforms > DataGrid クラス > https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagrid?view=netframework-4.8 > このクラスは .NET Core 3.1 以降のバージョンでは利用できません。 コントロールを DataGridView 置き換えて、コントロールを拡張する代わりに、コントロールを使用し DataGrid ます。 .NET Coreでは利用できない。`DataGridView`を使えとのこと。 ## System.Windows.Forms.ContextMenu > ContextMenu クラス > https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.contextmenu?view=netframework-4.8 `ContextMenuStrip`に変更する。 ## Microsoft.VisualBasic.PowerPacks.DataRepeater .NET Coreでは利用できない、代替コントロールもなし。 > Visual Basic Power Packs Controls > https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/cc488277(v=vs.120) > http://go.microsoft.com/fwlink/?linkid=321343 ## Encoding クラスを使用する前にプロバイダを登録する ```csharp= #if NET Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); #endif ``` ## .NET Coreで使用しないライブラリはプロジェクトから除外する ![](https://i.imgur.com/qr85JG1.png) :::warning 不要なライブラリがプロジェクトにあると、Visual Studioが自動的に読み込んでしまうことがある為、注意!! ::: ## LoadingRing.LoadingSolidRing #### オリジナル > hirekoke/LoadingRing > https://github.com/hirekoke/LoadingRing #### .NET Core 対応版がforkされているので利用させてもらう > Kisogawa/LoadingRing > https://github.com/Kisogawa/LoadingRing ## Microsoft.SDK.Expression.Blend(※特に、`System.Windows.Interactivity.dll`) `Microsoft.Xaml.Behaviors.Wpf`に変更する。 ## Prism.dll `Prism.Core`に変更する。 ## MaterialDesign * MaterialDesignColors.dll * MaterialDesignThemes.Wpf.dll `MaterialDesignThemes`と`MaterialDesignColors`の .NET Core 対応版を利用する。 ## DataSet、Resources、Settings の `.Designer.cs` が 自動的にネスト(nest)されない。 *.csproj に以下のように設定を追加する。 ```xml= <ItemGroup> <Compile Update="Properties\Resources.Designer.cs"> <DependentUpon>Resources.resx</DependentUpon> </Compile> <Compile Update="Properties\Settings.Designer.cs"> <DependentUpon>Settings.settings</DependentUpon> </Compile> <Compile Update="test\DataSet1.Designer.cs"> <DependentUpon>DataSet1.xsd</DependentUpon> </Compile> </ItemGroup> ``` ## ThoughtWorks.QRCode.Codec #### オリジナル > Open Source QRCode Library > https://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library > aaronogan/QR.NET > https://github.com/aaronogan/QR.NET #### .NET Core 対応版 > gokeiyou/ThoughtWorks.QRCode.Core > https://github.com/gokeiyou/ThoughtWorks.QRCode.Core :::info 上記のモジュールを使用するか、独自で.NET Core対応版を作成する。 ::: ## Crystal Reports, developer version for Microsoft Visual Studio > Crystal Reports, Developer for Visual Studio Downloads > http://nkurilog.blogspot.com/2017/12/crystal-reports-developer-version-for.html > Downloads for SAP Crystal Reports, SAP Crystal Presentation Design and SAP Crystal Dashboard Design > https://origin.softwaredownloads.sap.com/public/site/index.html #### .NET Core の対応予定はない > How to call/reference Crystal Reports from .Net Core > https://stackoverflow.com/questions/62057447/how-to-call-reference-crystal-reports-from-net-core > Crystal Reports for Visual Studio and .NET Core 5. Any plans? > https://www.google.com/search?q=Crystal+report+.net+core&oq=Crystal+report+.net+core&aqs=edge..69i57j0i13j0i30j0i13i30l3j0i30j0i8i13i30j0i8i30.6598j0j4&sourceid=chrome&ie=UTF-8 > Is it possible to display Crystal Report in ASP.Net Core Application > https://forums.asp.net/t/2148543.aspx?Is+it+possible+to+display+Crystal+Report+in+ASP+Net+Core+Application > Crystal Reports in ASP .NET Core 2.0 > https://answers.sap.com/questions/318288/crystal-reports-in-asp-net-core-20.html :::info 現時点では、`Cryastal Reports`を使い続ける場合、何らかの対応を独自に行う必要がある。 ::: :::info 2023-03-01 追記 `Crystal Reports Runner`なるリポジトリを発見。 https://github.com/gerardo-lijs/CrystalReportsRunner ::: ## Microsoft.ReportViewer、Microsoft.SqlServer.Types #### 公式な .NET Core 対応はアナウンスされていない > Asp.Net Core Reporting (SSRS) #1528 > https://github.com/dotnet/aspnetcore/issues/1528 #### 非公式な、.NET Core 対応版 > ilich/MvcReportViewer > https://github.com/ilich/MvcReportViewer > lkosson/reportviewercore > https://github.com/lkosson/reportviewercore > 「Reporting Services is a free Microsoft product. While decompiling and modifying it for compatibility reasons is legal in my local jurisdiction, redistributing modified version most likely is not. Use at your own risk.」 :::info `lkosson/reportviewercore`のソースを確認したところ、逆アセンブルして色々と調整している模様。「私の地元では合法です」とのこと。 日本語リソース関連の対応が行われていないようだ。 ::: > dotMorten/Microsoft.SqlServer.Types > https://github.com/dotMorten/Microsoft.SqlServer.Types > Install the package `dotMorten.Microsoft.SqlServer.Types` from NuGet. ## Resources.resx、Resources.Designer.cs `System.Resources.Extensions`パッケージが必要 ## WCF関連 .NET Core ではWCF関連機能の内、クライアント側機能のみ利用可能。 > WCF -- Windows Communication Foundation Client Libraries > https://github.com/dotnet/wcf #### System.Runtime.Serialization.IDataContractSurrogate .NET Core に見当たらない。 #### System.ServiceModel.ServiceContractAttribute `System.ServiceModel.Http`パッケージを利用。 #### System.ServiceModel.ServiceBehaviorAttribute .NET Core に見当たらない。 #### System.ServiceModel.Channels.SecurityBindingElement `System.ServiceModel.Security`パッケージを利用。 #### System.Web.Services.Protocols.SoapException .NET Core に見当たらない。 #### System.ServiceModel.Dispatcher.IErrorHandler > wcf/src/System.Private.ServiceModel/src/System/ServiceModel/Dispatcher/IErrorHandler.cs > https://github.com/dotnet/wcf/blob/main/src/System.Private.ServiceModel/src/System/ServiceModel/Dispatcher/IErrorHandler.cs#L10 `System.Private.ServiceModel`パッケージとして提供されているようだが、参照する事が出来ずにコンパイルが通らない。。。 `System.ServiceModel.Primitives`パッケージが使用されている??このパッケージには`IErrorHandler`が存在しない。。 #### WCFの代替プロジェクト > CoreWCF/CoreWCF > https://github.com/CoreWCF/CoreWCF ## GrapeCity.ActiveReports Windowsアプリケーションの `.NET Core` には対応していない模様。 > .NET Coreアプリケーションで ActiveReports を使用できますか? > https://www.grapecity.co.jp/developer/activereports/release/14 > > ActiveReports for .NET は、バージョン14.0Jで .NET Core に対応しました。 > > ASP.NET Coreアプリケーションでの使用をサポートしています。 > .NET Core デスクトップアプリ(Windowsフォーム/WPF)での使用はサポートしていません。 ## `LumenWorks.Framework.IO` > A Fast CSV Reader > http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader ソースコードが公開されているので、`.NET Core` でビルドしてライブラリを独自に作成する。 ## System.Collections.Generic.SynchronizedCollection `System.ServiceModel.Primitives`パッケージのインストールが必要。 ## Org.BouncyCastle BouncyCastle.dll オリジナル版では .NET Core 版を提供していない?? > BouncyCastle > The Legion of the Bouncy Castle > https://www.bouncycastle.org/csharp/ ` Portable.BouncyCastle`はオリジナル?? > Portable.BouncyCastle > https://www.nuget.org/packages/Portable.BouncyCastle/1.8.10?_src=template #### 代替プロジェクト > chrishaly/bc-csharp > https://github.com/chrishaly/bc-csharp > BouncyCastle.NetCore > https://www.nuget.org/packages/BouncyCastle.NetCore/ ## Microsoft.VisualStudio.QualityTools.UnitTestFramework > MSTestV1 から MSTestV2 へのアップグレード > https://docs.microsoft.com/ja-jp/visualstudio/test/mstest-update-to-mstestv2 ### csproj ```xml= <ItemGroup> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" /> <PackageReference Include="MSTest.TestAdapter" Version="2.2.7" /> <PackageReference Include="MSTest.TestFramework" Version="2.2.7" /> </ItemGroup> ``` ## 追加の参考資料 > NET Framewarkから NET 6への移行でやった細かいこと(C++CLIもあるよ) > https://youtu.be/1wcfGyDx6Xk ###### tags: `.NET Core` `.NET Framework` `.NET Framework 4.7.2`