-
Notifications
You must be signed in to change notification settings - Fork 2
ProGuide NET 10 Upgrade
Language: C#
Subject: Framework
Contributor: ArcGIS Pro SDK Team <arcgisprosdk@esri.com>
Organization: Esri, https://www.esri.com
Date: 04/20/2026
ArcGIS Pro: 3.7
Visual Studio: 2026
- 概要
- .NET 8 から .NET 10 への移行
- .NET Framework から .NET 10 への移行
- バージョン 3.7 以降のリリース向けの新しいアドインの開発
- .NET 10 におけるドラッグ&ドロップ機能の変更点
バージョン 3.7 のリリースに伴い、ArcGIS Pro は、Microsoft の最新版であり長期サポート (LTS) が提供される .NET (旧称「.NET Core」) である .NET 10 へ移行しました。
- これは 互換性を損なう変更 ではありません
- 再コンパイルを必要とする Pro API の変更はありません
- ArcGIS Pro 3.0 ~ 3.6 にデプロイされたアドインは、再コンパイルなしに 3.7 およびそれ以降の 3.x リリースで動作します*。
*.NET 10 におけるコピー/貼り付けに関するセクションをご覧ください
今後、ArcGIS Pro SDK .NET 3.7 以降での開発において、3.3 から 3.6 でビルドされたアドイン (または構成管理) を Pro 3.7 以降向けに再コンパイルする場合は、以下の移行手順を参照してください。本文では「アドイン」のみが明示的に言及されていますが、この手順は基本的に、.NET 8 Pro SDK 3.3~3.6 を使用したすべてのアドインおよび構成管理の開発プロジェクトに適用されます。バージョン 3.0 から 3.2 (つまり .NET 6) でビルドされたアドインを再コンパイルする場合は、まず ProGuide .NET 8 Upgrade Migrating from .NET 6 to .NET 8 を参照することをお勧めします。
Pro 3.7 以降がインストールされていることを前提として
- Visual Studio 2022 を Visual Studio バージョン 18.4.1 以降にアップグレードしてください(ArcGIS Pro SDK の要件を参照してください)。Visual Studio の更新プロセスの一環として、.NET 10 を必ずインストールしてください。
- 既存の Visual Studio プロジェクトのターゲット フレームワークを .NET 10 に変更します
- Config.daml ファイルを開き、アドインの Info タグにある desktopVersion 属性を 3.7 に変更します
- プロジェクトで Pro SDK の NuGet パッケージ「Esri.ArcGISPro.Extensions」を使用している場合は、バージョン 3.7 以降にアップグレードしてください。
NU1202 Package Esri.ArcGISPro.Extensions30 3.7.0.xxxx is not compatible with net8.0-windows7.0というエラーが表示された場合は、まずターゲット フレームワークを .NET 10 に変更するのを忘れていることを意味します。 - Microsoft.Windows.Compatibility NuGet を使用している場合は、バージョン 10.0.5 以降に更新してください。
- プロジェクトで他の NuGet パッケージを使用している場合は、それらが .NET 10 と互換性があることを確認してください。必要に応じて更新してください。
- 必要に応じて、アドインに対して Pro SDK ツールの「Fix Pro References」を実行してください。
- 再コンパイルしてください。 注: 以下のようなエラーが表示される場合:
Error CS1705
Assembly 'ArcGIS.Desktop.Framework' with identity 'ArcGIS.Desktop.Framework, Version=13.7.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86'
uses 'System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has
a higher version than referenced assembly 'System.Runtime' with identity 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
"YourProjectName here" ...
プロジェクトのターゲット フレームワークを .NET 8 から .NET 10 に変更してください。
以前のバージョンの ArcGIS Pro 向けに開発された コアホスト C# プロジェクトを移行するには、プロジェクトの「ターゲット フレームワーク」設定を、現在使用している ArcGIS Pro のバージョンで必要とされる .NET のリリースに変更するだけで済みます (前のセクションのステップ 2 を参照)。ArcGIS Pro SDK を使用して開発する場合、以下の ArcGIS Pro の各バージョンには、対応する以下の .NET のリリースが必要です:
- ArcGIS Pro 3.7: .NET 10 が必要です
- ArcGIS Pro 3.3 - 3.6: .NET 8 が必要です
- ArcGIS Pro 3.0 - 3.2: .NET 6 が必要です 新しい「ターゲット フレームワーク」で再ビルドすると、以前のバージョンの ArcGIS Pro との下位互換性が失われる点に注意してください。
以下の説明では、コアホスト スタンドアロン アプリケーションにおいて、新しい 3.x リリースとの前方互換性を確保するためのガイドラインをいくつか紹介します。要約すると、「コアホスト」アプリケーションとは、インストール済みの ArcGIS.Core.dll および ArcGIS.CoreHost.dll アセンブリーの .NET バージョン (コンパイル時点) に一致するターゲット .NET Framework に対してコンパイルされた、単なる .NET アプリケーションの EXE ファイルのことです。これらが「コアホスト」アプリケーションと呼ばれるのは、基盤となる Pro ライセンスおよびネイティブ ライブラリを初期化するために ArcGIS.CoreHost.dll に依存しているためです。
Visual Studio のデフォルトのデプロイ モードは、フレームワーク依存のデプロイ です。フレームワーク依存のデプロイ (FDD) では、生成される EXE ファイルは特定のバージョンの .NET をターゲットとするように構成され、アプリ (つまり「CoreHost」EXE) を実行する際には、そのターゲットとした .NET ランタイムが環境に存在している必要があります。これは、互換性があればアプリがマシン上のランタイムを単純に利用するため、exe をコンパイルして公開する上で最も便利な方法ですが、ターゲットとなるランタイムが変更された場合に再コンパイルが必要になるという欠点があります。FDD では、dotnet.exe 実行ファイルが FDD アプリケーションのホストとして機能します。dotnet.exe は適切なランタイムのバージョンを検出し、それをロードしてから、アプリケーションのエントリポイントを実行します。
これとは対照的なデプロイ方法は、自己完結型のデプロイ (SCD) と呼ばれ、アプリケーションは、ネイティブ依存関係をすべて除き、必要なすべての .NET ライブラリー、ターゲット ランタイム、およびアプリケーションの依存関係を含めてコンパイルおよびデプロイされます。SCD には、ターゲットマシンに必要な .NET ランタイムをインストールする必要がないという利点がありますが、FDD アプリケーションよりもはるかにサイズが大きく、デプロイにはカスタム インストーラーが必要になる可能性が高いです。コアホスト アプリケーションの EXE ファイルが実行されるターゲット マシンには、Pro アプリケーションがすでにデプロイされている必要があるため、必要な .NET ランタイムも ArcGIS.Core.dll および ArcGIS.CoreHost.dll アセンブリと共にデプロイされることになります。その結果、自己完結型デプロイメント方式の利点は無意味になってしまいます。したがって、コアホスト アプリケーションには SCD を使用しないでください。
コアホスト アプリケーションでは、ArcGIS.Core および ArcGIS.CoreHost という 2 つの ArcGIS Pro アセンブリーへの参照が必要です。将来的な互換性を確保するため、アセンブリーの解決は実行時にアセンブリー解決ツールを使用して行う必要があります。アセンブリー解決を実装するには、以下の手順を実行してください。
- 「Copy Local」属性を「No」に設定します。デフォルトは「Yes」です。(VS のソリューション エクスプローラーで
ArcGIS.Core.dllおよびArcGIS.CoreHost.dllの依存関係を右クリックし、「プロパティ」を選択します) - 「Specific Version」が空白であるか、「No」に設定されていることを確認します。
-
Main(string[] args)メソッドに、Pro 依存のコードを一切追加しないでください。代わりに、コアホスト アプリケーション プロジェクト テンプレートによって自動的に追加されたデフォルトのHost.Initialize();行を削除し、それを「Main」メソッドから呼び出す新しいメソッドに配置してください。 -
CoreHostResolveAssembly サンプルにあるアセンブリー解決コードをアプリケーションに追加してください。具体的には、Main 内のアセンブリリゾルバを登録する行
currentDomain.AssemblyResolve += new ResolveEventHandler(ResolveProAssemblyPath);および、実際の解決コード自体を含むメソッドです。 - ターゲット フレームワークを更新するには、アプリケーションのプロパティでターゲット フレームワークを変更し、CoreHost アプリケーションを再コンパイルする必要があります。
前方互換性を確保するために上記のすべての手順に従ってコアホスト アプリをビルドした場合、コマンドラインやスクリプト、ショートカットからdotnet execコマンドを使用して (FDD) コアホスト アプリケーション**を直接実行することで、再コンパイルを回避できる可能性があります*。この目的で dotnet exec と共に使用できる 2 つのオプションは次のとおりです:
-
--fx-version <version>- ここで「version」は、アプリケーションの実行に使用する (正確な) インストール済みの .NET バージョンです。インストール済みのランタイムの一覧を表示するには、dotnet --list-runtimes --X64を使用してください。 -
--roll-forward <value>ここで、「value」はLatestPatch、Minor、LatestMinor、Major、LatestMajor、Disableのいずれかです。Microsoft は各値を次のように説明しています:- LatestPatch: メジャー バージョンとマイナー バージョンが同じで、最も新しいパッチ バージョンにロールフォワードします。
- Minor: 指定されたマイナー バージョンが存在しない場合、最も新しいマイナー バージョンにロールフォワードします。
- Major: 指定されたメジャー バージョンが存在しない場合、利用可能な最も新しいメジャー バージョンとマイナー バージョンにロールフォワードします。
- LatestMinor: 指定されたバージョンが存在する場合でも、利用可能な最も新しいマイナー バージョンにロールフォワードします。
- LatestMajor: 要求されたバージョンが存在する場合でも、利用可能な最高メジャー バージョンにロールフォワードします。
- Disable: ロールフォワードを無効にします。指定された正確なバージョンが見つかった場合のみ、アプリケーションが実行されます。
//Run MyCoreHostApp.dll using .NET version 10.0.5 - assumes 10.0.5 is installed on the machine or
//fx-version will fail
>dotnet exec --fx-version "10.0.5" "C:\Data\SDK\Test\MyCoreHostApp\bin\MyCoreHostApp.dll"
//Run MyCoreHostApp.dll using .NET with the highest patch version with the same major and minor version
//as MyCoreHostApp targets installed on the machine - assumes there is a patched version
//of the requested .NET MyCoreHostApp targets -with the same major and minor version- or "roll-forward" fails
>dotnet exec --roll-forward LatestPatch "C:\Data\SDK\Test\MyCoreHostApp\bin\MyCoreHostApp.dll"
//Run MyCoreHostApp.dll using .NET with whatever is the highest major version regardless of what the
//MyCoreHostApp targets. This will fail if the latest version of .NET on the machine is not compatible
//with MyCoreHostApp.dll
>dotnet exec --roll-forward LatestMajor "C:\Data\SDK\Test\MyCoreHostApp\bin\MyCoreHostApp.dll"
//Note:
//dotnet.exe is typically located at C:\Program Files\dotnet\dotnet.exe. If "C:\Program Files\dotnet" is
//not in your PATH you will have to add it or give a fullpath reference to dotnet.exe
Note: コミュニティのサンプル リポジトリには、コアホスト アプリケーションの前方互換性を確保するために、適切な .NET リリースを自動的に特定するコマンドラインアプリが含まれています。サンプルはこちらからご覧いただけます:RunCoreHostApp
Note:まず最初に .NET 8 へ移行するには、ProGuide NET 8 Upgrade, Migrating from .NET 6 to .NET 8の手順に従う必要がある場合があります。それ以外の場合は、上記の手順に従い、.NET 8 を .NET 6 に置き換えて実行してください。
.NET 6 で作成されたコアホスト コンソール .exe を再コンパイルする際、次のようなエラーが表示される場合:
Error NETSDK1083
The specified RuntimeIdentifier `win10-x64` is not recognized. See https://aka.ms/netsdk1083 for more information.
.csproj ファイルを開き、以下の行の内容が正しいことを確認してください。必要に応じて変更してください:
<TargetFramework>net8.0-windows</TargetFramework>
<!--RuntimeIdentifier>win10-x64</RuntimeIdentifier --><!-- old - note win"10"-x64 -->
<RuntimeIdentifier>win-x64</RuntimeIdentifier><!-- new - "win10-x64" was changed to "win-x64" -->詳細については、NETSDK1083: 指定された RuntimeIdentifier が認識されません をご覧ください。
バージョン 2.x および .NET Framework を使用して作成されたアドインをお持ちの場合は、まず、ProConcepts 3.0 Migration Guide の手順に従って、プロジェクトを Pro 3.x および .NET 6 に変換する必要があります。2.x から 3.x への移行は、互換性を損なう変更となります。アドインを 3.x アドインに変換したら、必要に応じて上記の手順に従い、Pro 3.7 以降および .NET 10 で再コンパイルを行ってください。
- Visual Studio を 18.4.1 以上にアップグレードし、.NET 10 が含まれていることを確認してください(ArcGIS Pro SDK の要件を参照してください)。
- Pro および Pro SDK のバージョンを 3.7 以降にアップグレードしてください。
- Visual Studio で、適切な Pro SDK プロジェクト テンプレートを使用して、新しい ArcGIS Pro SDK プロジェクトを作成してください。
.NET 9 以降、そして現在の .NET 10 において、Microsoft .NET は BinaryFormatter のサポートを終了しました。これは、セキュリティおよび脆弱性に関する考慮事項によるものです: Microsoft BinaryFormatter 移行ガイド および お知らせ: .NET 9 で BinaryFormatter が削除されます #98245。BinaryFormatter は、.NET プラットフォーム全体でドラッグ&ドロップやコピー&ペーストに広く使用されていました。これは実際には、クリップボードとやり取りを行う以下のような .NET コードが、今後動作しなくなることを意味します:
IDataObject dataObj = Clipboard.GetDataObject();
ArrayList array = dataObj.GetData(typeof(ArrayList)) as ArrayList; // Returns null in .NET 9+
...ただし、コンテンツはテキストとしてクリップボードにシリアル化することができます。したがって、たとえば、以下のコードを使用すれば、テキストとしてクリップボードにコピーされたコンテンツを取得することができます:Clipboard.GetText() および/または Clipboard.GetText(TextDataFormat.UnicodeText)。当然のことながら、クリップボードを使用するカスタム アドインのコードも影響を受けるため、.NET 10 で動作するように書き直す必要があります。
具体的には、ArcGIS.Desktop.Framework.DragDrop.DragInfo クラスの dragInfo.Dataプロパティを扱う際、前述と同じ挙動が確認されます。dragInfo.Data は、(コピー / 貼り付けまたはドラッグ / ドロップによって) クリップボードに配置された基底の System.Windows.IDataObject オブジェクトを「指し示す」ため、dragInfo.Dataは、それが指し示す基底の System.Windows.IDataObject と同様に、バイナリデータを含まなくなります。したがって、Pro インスタンス間、アドインとカタログビュー間、および/またはアドインと Windows エクスプローラーからドラッグされたコンテンツ間のドラッグ&ドロップをサポートするには、.NET 10 以降において、ソースとターゲットはテキストを使用する必要があります。なお、マップまたはレイアウトの TOC からアドインへのアプリケーション間ドラッグ&ドロップには影響ありません。Pro との互換性を保つため、クリップボードへの書き込みに使用されるテキストは、ドラッグ&ドロップまたはコピー&ペーストされるオブジェクトのシリアル化 / デシリアル化された XML でなければなりません。
以下のコードスニペットは、3.7 以降のアドインが dragInfo.Data にアクセスする際に使用すべきパターンを示しています。このコードスニペットは、ArcGIS Pro SDK「DragAndDrop」コミュニティサンプル から引用したものです。次の行に注意してください:else if (dropInfo.Data is string xml) {。dropInfo.Data にテキストが含まれており、それが XML である場合、アクセスする前に ArcGIS.Desktop.Core.ClipboardItem の配列にデシリアライズすることができます。バージョン 3.6 以前では、ClipboardItem の配列に直接アクセスすることができました (dropInfo.Data is List<ClipboardItem> clipboardItems)。バージョン 3.7 以降および .NET 10 では、この行は常に false を返します。
以下は、Framework DragAndDrop サンプル内のカスタム DragAndDropDockpane1ViewModel ドックペイン・ビューモデル・クラスから抜粋した、Drop ハンドラ・ルーチンの完全な実装です:
public override async void OnDrop(DropInfo dropInfo)
{
//eg, if you are accessing a dropped file
string filePath = dropInfo.Items[0].Data.ToString();
if (dropInfo.Data is List<ClipboardItem> clipboardItems) //Dropped from Catalog in 3.6 or earlier
//Will always be _false_ at 3.7 or later
{
var thisItem = clipboardItems.FirstOrDefault();
var itemInfo = thisItem.ItemInfoValue.typeID;
if (itemInfo != "database_fgdb") //Not a file gdb
{
dropInfo.Handled = false;
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show($"Drag and drop File GDB only here");
return;
}
Name = thisItem.CatalogPath;
}
else if (dropInfo.Data is string xml) //This is new for 3.7+!!! Note that it checks for type of "string"
//-not- binary format as above
{
var serializer = new XmlSerializer(typeof(ClipboardItem[]));//Deserialize
using (var reader = new StringReader(xml))
{
var clipBoardItems = (ClipboardItem[])serializer.Deserialize(reader);//returns null if dropInfo.Data
//did not come from Pro
// Use clipBoardItems as needed
// For example, you can process the first item:
var thisItem = clipBoardItems?.FirstOrDefault();
if (thisItem != null)
{
var itemInfo = thisItem.ItemInfoValue.typeID;
if (itemInfo != "database_fgdb") //Not a file gdb
{
dropInfo.Handled = false;
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show($"Drag and drop File GDB only here");
return;
}
Name = thisItem.CatalogPath;
}
}
}
else //Dropped from File Explorer
{
FileInfo file = new FileInfo(filePath);
if (string.Compare(file.Extension, ".gdb", true) == 0) //.gdb
{
Name = filePath;
dropInfo.Handled = true;
}
else //Not a .gdb
{
dropInfo.Handled = false;
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show($"Drag and drop File GDB only here");
return;
}
}
GDBItems = await GetGDBItemsAsync();
//set to true if you handled the drop
dropInfo.Handled = true;
}
Home | API Reference | Requirements | Download | Samples | Snippets
- Overview of the ArcGIS Pro SDK (_ja)
- What's New for Developers at 3.7 (_ja)
- Installing ArcGIS Pro SDK for .NET (_ja)
- Release notes (_ja)
- Resources (_ja)
- Pro SDK Videos
- ProSnippets
- ArcGIS Pro API (_ja)
- ProGuide: ArcGIS Pro Extensions NuGet (_ja)
Migration
- ProConcepts: 3.0 Migration Guide (_ja)
- ProGuide: .NET 8 Upgrade (_ja)
- ProGuide: .NET 10 Upgrade (_ja)
- ProConcepts: Framework (_ja)
- ProConcepts: Asynchronous Programming in ArcGIS Pro (_ja)
- ProConcepts: Advanced topics
- ProGuide: How to Increment Addin Version Number
- ProGuide: Custom settings
- ProGuide: Command line switches for ArcGISPro.exe
- ProGuide: Reusing ArcGIS Pro Commands
- ProGuide: Licensing
- ProGuide: Digital signatures
- ProGuide: Command Search
- ProGuide: Keyboard shortcuts
- ProSnippets: Framework (_ja)
- ProSnippets: DAML (_ja)
Add-ins
- ProConcepts: Localization
- ProGuide: Installation and Upgrade (_ja)
- ProGuide: Your first add-in (_ja)
- ProGuide: ArcGIS AllSource Project Template
- ProGuide: Content and Image Resources
- ProGuide: Embedding Toolboxes
- ProGuide: Diagnosing ArcGIS Pro Add-ins (_ja)
- ProGuide: Regression Testing
Configurations
Copilot
Customization
- ProGuide: The Ribbon, Tabs and Groups (_ja)
- ProGuide: Buttons (_ja)
- ProGuide: Label Controls (_ja)
- ProGuide: Checkboxes
- ProGuide: Edit Boxes
- ProGuide: Combo Boxes
- ProGuide: Context Menus
- ProGuide: Palettes and Split Buttons
- ProGuide: Galleries
- ProGuide: Dockpanes
- ProGuide: Code Your Own States and Conditions
- ProGuide: Command Filter
- ProGuide: Custom toolbars for view panes
Styling
- ProConcepts: Project Content and Items
- ProConcepts: Custom Items
- ProGuide: Custom Items
- ProGuide: Custom browse dialog filters
- ProSnippets: Content
- ProSnippets: Browse Dialog Filters
- ArcGIS Pro TypeID Reference
- ProConcepts: Editing
- ProConcepts: Annotation Editing
- ProConcepts: Dimension Editing
- ProGuide: Editing Tool
- ProGuide: Sketch Tool With Halo
- ProGuide: Construction Tools with Options
- ProGuide: Annotation Construction Tools
- ProGuide: Annotation Editing Tools
- ProGuide: Knowledge Graph Construction Tools
- ProGuide: Templates
- ProSnippets: Editing
COGO
3D Analyst Data
Plugin Datasources
Topology
Linear Referencing
Object Model Diagram
- ProConcepts: Geometry
- ProConcepts: Multipatches
- ProGuide: Building Multipatches
- ProSnippets: Geometry
- ProSnippets: Geometry Engine
Relational Operations
- ProConcepts: Knowledge Graph
- ProGuide: Knowledge Graph Construction Tools
- ProSnippets: Knowledge Graph
Reports
Presentations
- ProConcepts: Map Authoring
- ProConcepts: Annotation
- ProConcepts: Dimensions
- ProGuide: Tray buttons
- ProGuide: Custom Dictionary Style
- ProGuide: Geocoding
- ProSnippets: Map Authoring
- ProSnippets: Annotation
- ProSnippets: Charts
- ProSnippets: Labeling
- ProSnippets: Renderers
- ProSnippets: Symbology
- ProSnippets: Text Symbols
3D Analyst
CIM
Graphics
Scene
Stream
Voxel
- ProConcepts: Map Exploration
- ProGuide: Map Pane Impersonation
- ProGuide: TableControl
- ProSnippets: Map Exploration
- ProSnippets: Custom Pane with Contents
Map Tools
- ProGuide: Feature Selection
- ProGuide: Identify
- ProGuide: MapView Interaction
- ProGuide: Embeddable Controls
- ProGuide: Custom Pop-ups
- ProGuide: Dynamic Pop-up Menu
Telecom Domain Network
Network Diagrams
- ProConcepts: Workflow Manager
- ProSnippets: Workflow Manager
- ProConcepts: Workflow Manager Classic (deprecated)
- ArcGIS Pro API Reference Guide
- ArcGIS Pro SDK (doc.esri.com)
- arcgis-pro-sdk-community-samples
- arcgis-pro-sdk-snippets
- ArcGISPro Registry Keys
- ArcGIS Pro DAML ID Reference
- ArcGIS Pro Icon Reference
- ArcGIS Pro TypeID Reference
- ProConcepts: Distributing Add-Ins Online
- FAQ
- Archived ArcGIS Pro API Reference Guides
- Dev Summit Tech Sessions (_ja)