Windows 版 AutoCAD 2025 は、従来製品が採用してきた Windows 専用の .NET Framework 4.8 に代わって、クロスプラットフォームで利用可能な .NET 8 を採用しています。.NET Framework と .NET(.NET Core)でも少し触れていますが、.NET 登場の背景やから、この変更は将来を見据えた判断によるものです。
製品自体のルック&フィール(見た目や操作感)に変化はありませんが、AutoCAD .NET API を使用する .NET Framework 4.8 ベースの Visual Studio プロジェクトは、.NET 8 へアップグレードして再ビルドする必要があります。
ここでは、AutoCAD 2024 用の .NET Framework 4.8 ベースの Visual Studio 2022 アドイン プロジェクトを、AutoCAD 2025 用に .NET 8 ベースへ移植する具体的な手順をご紹介します。
.NET アップグレード アシスタントの入手
あいにく、Visual Studio プロジェクト自体に互換性がないため、プロジェクト設定でターゲット フレームワークと参照アセンブリのみを更新して対応することが出来ません。Visual Studio プロジェクトを .NET 8 ベースに移行するには、Microsoft が提供している「.NET アップグレード アシスタント」を利用することが出来ます。
.NET アップグレード アシスタントの入手ととインストールについては、.NET アップグレード アシスタントをインストールする方法 で説明されています。
.NET アップグレード アシスタントがサポートするプロジェクトは、C# と VB のみです。ObjectARX を利用する mixed mode の C++ プロジェクトは、 .NET アップグレード アシスタントを利用したプロジェクトのアップグレードはサポートされません。
なお、一部、.NET 8 へ移行出来ない(コードの移植/改変が必要)なものも存在します。それらの概要は、次の記事で紹介されていますので、プロジェクトのアップグレード前に一読されることをお勧めします。
- .NET Framework から .NET 6 に移植する - .NET Core | Microsoft Learn
- 破壊的変更 - .NET Framework から .NET Core | Microsoft Learn
.NET 8 の入手
.NET アップグレード アシスタントを後述する手順で利用した際、プロジェクトが .NET 8 ベースに移行出来ない、あるいは、AutoCAD 2025 のアセンブリを参照設定出来ない場合、お使いのコンピュータに .NET 8 がインストールされていない可能性があります。
Visual Studio Installer から Visual Studio 2022 の [個別のコンポーネント] で導入することも出来ますが、 必要に応じて .NET 8.0 (Linux、macOS、Windows) をダウンロードする (microsoft.com) からインストーラーをダウンロードしてインストールすることも可能です。(Windows の x64 インストーラー)
新しいアセンブリの入手
AutoCAD 2025 へのプロジェクト移植には、同バージョン用に用意された .NET 8 ベースのアセンブリと、同アセンブリの参照設定が必要です。AutoCAD 2025 アセンブリは、従来と同じく、AutoCAD のインストール フォルダや、ObjectARX SDK に含まれていますが、https://www.nuget.org/packages/AutoCAD.NET/ で公開されている NuGet パッケージをオンラインで入手、利用することが出来ます。今回は、この NuGet パッケージを使っていきます。
スムーズなアップグレード例
まず、おおまかな手順の把握のために、Visual Studio 2022 上で AutoCAD 2024 .NET Wizard を使って作成したシンプルな C# プロジェクトを、アップグレード アシスタントでアップグレードする例をご紹介します。
この例ではスムーズにプロジェクトのアップグレードが完了しますが、場合によってはプロジェクト ファイル(ここでは C# プロジェクトなので .csproj ファイル)をテキストとして編集しなければならない場合もあります。手順事態は、次のようになります。
1. C# プロジェクトを新しい SDK スタイル形式に変換
・ .NET Upgrade Assistant を使用
2. ターゲット フレームワークを .NET 8.0-Windows に更新
<TargetFramework>net8.0-windows</TargetFramework>
・WPF 使用の場合 – <UseWPF>true</UseWPF> を追加
・WinForms 使用の場合 – <UseWindowsForms>true</UseWindowsForms> を追加
3. 参照を更新:System 参照は削除が可能(.NET 8 の既定)
4. 互換性のないパッケージ、ライブラリ参照、形骸化した古いコードに対処
なお、プロジェクトによって参照しているアセンブリが異なりますが、この例では NuGet パッケージから AutoCAD .NET、AutoCAD .NET Core、AutoCAD .NET Model 別にすべてをインストール・参照するようにしています。
アップグレード アシスタントでエラーになってしまう例(VB プロジェクトの例)
次に、ObjectARX SDK for AutoCAD 2024 で提供されている TabExtension サンプル(\ObjectARX 2024\samples\dotNet\TabExtension)である VB プロジェクトを、Visual Studio 2022 上でアップグレード アシスタントを使ってアップグレードする例をご紹介します。
あいにく、アップグレード アシスタントも完璧ではないようで、少し前に公開されていたアップグレード アシスタントのケースでは、プロジェクトのアップグレードが失敗してしまいました。そこで、同ケースでは、クリーンな(必要最低限な)プロジェクト ファイルを別に用意して、アップグレードに失敗したプロジェクト ファイル(ここでは tabextension.vbproj)の内容を置き換える処理を加えてアップグレードを実施しています。
- なお、最新の .NET アップグレード アシスタントでは、TabExtension サンプル プロジェクトもエラーなくアップグレード出来ることを確認済です。
このアップグレードでプロジェクト ファイル tabextension.vbproj 内容置き換えに使用した記述は、次のとおりです。プロジェクト名を反映した <RootNamespace>TabExtension</RootNamespace> の他に、AutoCAD .NET API を使用するアドインに最低限必要な AcDbMgd.dll、AcMgd.dll、AcCoreMgd.dll アセンブリを参照する <Reference>~</Reference> を確認出来るかと思います。
<?xml version="1.0" encoding="utf-8"?><Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Library</OutputType><RootNamespace>TabExtension</RootNamespace><TargetFramework>net8.0-windows</TargetFramework><UseWindowsForms>true</UseWindowsForms><AssemblySearchPaths>..\..\..\inc\;$(AssemblySearchPaths)</AssemblySearchPaths></PropertyGroup><ItemGroup><Reference Include="AcDbMgd"><Private>False</Private></Reference><Reference Include="AcMgd"><Private>False</Private></Reference><Reference Include="AcCoreMgd"><Private>False</Private></Reference></ItemGroup></Project>
上記、動画でご紹介した手順は次のようになります。
1. アップグレード アシスタントによるプロジェクト アップグレードを実行
2. アップグレードエラー回避のため、.vbproj 定義(XML)の内容を置換(前述)
3. NuGet パッケージ ソースを追加してアセンブリ参照を解決
4. ビルドして AutoCAD 2025 で動作テスト
既知の問題に対する対応例
アップグレード後のビルドでエラーが発生してしまった場合の既知の対応は次の通りです。
MSB3277 ビルド警告
・AcDbMgd.dll、AcCoreMgd.dll を参照するコードのビルド時
対処:Windowsデスクトップ・フレームワークへの参照を追加:
<ItemGroup>
<FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>
CA1416 ビルド警告
・Windows システム機能のみを使用する場合
対処:AssemblyInfo.cs に次の行を追加:
[assembly:System.Runtime.Versioning.SupportedOSPlatformAttribute
破壊的変更 - .NET Framework から .NET Core | Microsoft Learn にあるとおり、一部のクラスや機能にコード上の変更や設定の変更を求められる場合もあり得ます。AutoCAD 図面データベース検査ツール でご紹介した MgdDbg サンプルでは、次のクラスの置き換えが必要でした。
.NET Framework | .NET 8.0 |
ContextMenu | ContextMenuStrip |
MenuItem | ToolStripMenuItem |
Thread.Abort | CancellationToken |
BinaryFormatter | EnableUnsafeBinaryFormatterSerialization=true https://github.com/dotnet/winforms/issues/9701 |
MgdDbg リポジトリには、 .NET Framework 4.8 と .NET 8.0 の 2 つのブランチが用意されていますので、適宜、両者を比較してみてください。
- .NET Framework 4.8 ブランチ(NET4,8 ブランチ):https://github.com/ADN-DevTech/MgdDbg/tree/NET4.8
- .NET 8.0 ブランチ(master ブランチ):https://github.com/ADN-DevTech/MgdDbg
デバッグ設定
.NET 8 では、デバッガーのコアタイプとして Managed .NET Core を選択する必要があります。C++/CLI アプリケーションの場合、アンマネージコードへのデバッグには追加のステップが必要です。デバッガーのコアタイプとして、Managed .NET Core と Native の両方を選択する必要があります。
これ以外にも、概要 - Managed .NET の互換性 にあるような、通年の AutoCAD バージョンアップにともなう AutoCAD API 上の変更を加える必要もあります。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。