ProConcepts 3.0 Migration Guide - EsriJapan/arcgis-pro-sdk GitHub Wiki

ArcGISPro 3.0 は、倉曎点の倚いリリヌスです。3.0 API の倉曎点および 2.x アドむン、コンフィグレヌション、コアホスト アプリケヌション、およびプラグむン デヌタ゜ヌス ゚クステンションの移行手順に぀いおは、このドキュメントで説明したす。このドキュメントの移行手順は、2.x アドむンを任意の 3.x リリヌスに移行する堎合に適甚されたす。

Language:      C#
Subject:       Framework
Contributor:   ArcGIS Pro SDK Team <[email protected]>
Organization:  Esri, http://www.esri.com
Date:          10/06/2024
ArcGIS Pro:    3.4
Visual Studio: 2022

トピック

抂芁

ArcGIS Pro は 3.0 で、.NET 6 に移行したした。これは Microsoft の最新バヌゞョンの .NET (旧称「.NET Core」) であり、長期サポヌト (LTS) が適甚されたす。これは、次のこずを意味する重倧なリリヌス倉曎です。

  • Pro のバヌゞョン 2.x でコンパむルされたアドむン、構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌションは、Pro 3.0 以降では 動䜜したせん。
  • パブリック API (Pro の) は change の察象ずなりたす。
  • Pro のメゞャヌ バヌゞョンのむンクリメントは 2.x から 3.x に倉曎されたす。

泚: ArcGIS Pro 3.3 で Pro は .NET 6 から .NET 8 に移行したした。ArcGIS Pro 3.3 以降 で Pro 2.x から移行する堎合は、䞀般的に、このドキュメントに蚘茉されおいる手順内で .NET 6 の代わりに .NET 8 を䜿甚しおください。

Pro ドキュメントのバヌゞョン倉曎

ArcGIS Pro 3.0 では、ArcGIS Pro プロゞェクト、プロゞェクト テンプレヌト、パッケヌゞ、レむダヌ、およびマップ ファむル (.aprx、.ppkx、.aptx、.pagx、.lyrx、.mapx など) のドキュメント バヌゞョンも 3.0 に倉曎されたした。ArcGIS Pro 3.0 を䜿甚しお䜜成たたは 保存 されたプロゞェクト、テンプレヌト、パッケヌゞなどは、ドキュメント バヌゞョン 3.0 で保存されたす。これには、ドキュメント バヌゞョン 2.x を 3.0 で開いたファむル、パッケヌゞ、テンプレヌトなどが含たれたす。詳现に぀いおは、Pro ヘルプの ArcGIS Pro 移行ヘルプ トピック を参照しおください。

泚: 2.x で䜜成されたマップ、レむアりト、およびレむダヌ (.mapx、.pagx、.lyrx) およびパッケヌゞ (.mpkx、.lpkx) は、3.0 で 倉曎なしに 公開 API から読み蟌むこずができたす。これに぀いおは、このドキュメントの マップ、レむアりト、およびレむダヌ ファむルずパッケヌゞ セクションで説明されおいたす。

前方互換性

アドむン、構成、およびプラグむン デヌタ゜ヌスは、Pro の マむナヌ リリヌス 間でのみ前方互換性がありたす。メゞャヌ リリヌス間での前方互換性はありたせん。2.9 から 3.0 ぞの移行は メゞャヌ リリヌスであるため、Pro の 2.x バヌゞョンに察しおコンパむルされたアドむン、構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌションは、Pro 3.x に 移行 し 再コンパむル する必芁がありたす。

移行手順に぀いおは、以䞋の Pro 3.0 ぞの移行 セクションで詳しく説明しおいたす。

アドむンの登録

2.x のアドむン、構成、たたはプラグむン デヌタ゜ヌスを Pro 3.x に察しお登録しようずするず、展開はされたすが登録に倱敗したす。RegisterAddin.exe は、むンストヌルしようずしおいるアドむンたたは構成が珟圚のバヌゞョンの Pro ず互換性がないため、譊告メッセヌゞをポップアップ衚瀺したす。

reg-addin-failed.png

むンストヌルを続行するず、アヌカむブ ファむルがそれぞれのフォルダヌに展開されたすが、Pro の起動時に読み蟌みはされたせん。

アドむンず構成が読み蟌たれない

倚くの堎合、Pro を 3.x にアップグレヌドするずきに、2.x リリヌスからすでにアドむンたたは構成がマシンにむンストヌルされおいる可胜性がありたす。2.x リリヌスからむンストヌルされたアドむン、構成、およびプラグむンデヌタ゜ヌスは、Pro 3.x では読み蟌たれたせん。珟圚のリリヌスず互換性のないアドむンは、Pro のアドむン マネヌゞャヌのバックステヌゞ タブに無効ず衚瀺されたす。アドむンは、ロヌドする前に Pro 3.x に移行 する必芁がありたす。構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌションに぀いおも同様です*。

addin-did-not-load.png

*コア ホスト アプリケヌションは移行する必芁がありたすが、Pro によっお読み蟌たれたり、登録されたりするこずはありたせん。

ビルド サヌバヌでの ArcGISSignAddIn.exe の䜿甚

泚: ProConcepts Advanced Topics, manual configuration of a build server に埓っお、ArcGISSignAddIn.exe を 2.x で (ArcGIS Pro をむンストヌルせずに) 䜿甚するようビルド サヌバを構成するには、参照するサヌバヌの Pro bin フォルダヌにも DADFLib.dll ず zlibwap.dll を甚意 (コンパむルの目的で) するこずが必芁になりたした。

3.x で、ArcGISSignAddIn.exe を䜿甚しおアドむンに眲名するには、ArcGISSignAddIn.exe、ArcGISSignAddIn.dll、ArcGISSignAddIn.runtimeconfig.json、および DADFLib.dll をサヌバヌの Pro bin フォルダヌにコピヌしたす。詳现に぀いおは、前述の ProConcepts Advanced Topics を参照しおください。

Pro 3.x ぞの移行

2.x のアドむン、構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌションは、Pro アプリケヌションで (たたは Pro アプリケヌション䞊で) 実行する前に、Pro 3.x に移行する必芁がありたす。移行のプロセスは、このドキュメントの䞻題であり、通垞、次の 2 ぀のステップに埓いたす。

  1. アドむン、構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌションは、.NET Framework 4.x から .NET 6 に倉換する必芁がありたす。
  2. アドむン、構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌションを 3.x に察しお再コンパむルし、結果ずしお生じるコンパむル ゚ラヌ (API の重倧な倉曎による) を修正する必芁がありたす。

このドキュメントでは、Pro の 4 ぀の拡匵パタヌン - アドむン、構成、プラグむン デヌタ゜ヌス、およびコアホスト アプリケヌション - をたずめお「アドむン」ず呌びたす。特別な泚意のために具䜓的に蚀及されおいたす。

Pro ず Pro SDK for 3.0 のむンストヌル

3.0以䞊のアドむンを移行するには、3.x Pro SDKをむンストヌルする必芁がありたす。3.x の Pro SDK の最小 芁件 は Visual Studio 2022 ず .NET 6 です。2.x から ArcGIS Pro 3.x SDK ぞの移行は、アップグレヌドではありたせん。2.x から ArcGIS Pro 3.x SDK をむンストヌルするには、゚クステンション > ゚クステンションの管理 > オンラむンを䜿甚しお、Visual Studio マヌケットプレむスから Pro SDK vsixs を怜玢する必芁がありたす。怜玢文字列は「ArcGIS Pro SDK」を䜿甚したす。むンストヌルできる゚クステンションは 3 ぀に分かれたす

  • ArcGIS Pro SDK for .NET,
  • ArcGIS Pro SDK for .NET (Utilities)
  • ArcGIS Pro SDK for .NET (Migration).

いく぀か泚意点がありたす ArcGIS Pro 3.x SDK には Visual Studio 2022 が必芁です。Visual Studio 2022 内で ArcGIS Pro SDK を怜玢しないず、ArcGIS Pro 2.9 SDK が衚瀺されるこずを確認しおください。たた、.NET 6.0.5 がむンストヌルされおいるか、better であるこずを確認しおください。旧バヌゞョンの SDK をむンストヌルし、「自動曎新」をオンにしおいおも、Visual Studio からの曎新通知はありたせん。

ステップ 1 倉換

Pro 3.x ぞの移行は、アドむンを .NET Framework から .NET 6 に倉換するこずから始たりたす。アドむンを 手動 で .NET 6 に移行しおも問題ありたせん。この堎合、Pro SDK テンプレヌトを䜿甚しお新しいアドむン (たたは構成、プラグむン、たたはコアホスト) プロゞェクトを䜜成し、関連する゜ヌス ファむル、サヌド パヌティの䟝存関係 (.NET をサポヌトするために必芁に応じお曎新)、Nuget 参照などをコピヌし、2.x プロゞェクトの 3.x バヌゞョンを再構築したす。これは、アドむンに特定の特異性がある堎合や、.NET 甚に手動で再構成する必芁がある特別な蚭定がある堎合に適しおいたす。それ以倖の堎合は、この特定のセクションの残りの郚分で焊点を圓おおいる「Pro Migrate Project」ナヌティリティを䜿甚しおください。

泚: アドむン開発者は、migration utility を実行する前に、必芁に応じお、倉換前のプロゞェクトのバックアップたたはコピヌを䜜成する必芁がありたす。アドむンのアセンブリ パスを曎新する必芁がある堎合 (2.x アドむンを他のマシンからコピヌした堎合など)、移行ツヌルを実行する前に Pro Fix References (proapp-sdk-utilities.vsix より) を実行しお 2.x.csproj/.vbproj のアセンブリ パスを曎新しおください。

「Pro Migrate Project」をむンストヌルするには、Pro SDK 3.x に付属の「proapp-sdk-migration.vsix」を実行したす。これにより、Visual Studio 2022 プロゞェクトのコンテキスト メニュヌにナヌティリティが远加されたす (他の Pro SDK コンテキスト メニュヌ オプションず共に)。

MigrateUtility.png

migration utility を実行するには、Visual Studio 2022 でそれぞれのアドむン、構成、プラグむン デヌタ゜ヌス、たたはコアホスト アプリケヌション プロゞェクトを開きたす。次に、右クリック > [Pro Migrate Project] オプションを実行し、アドむン プロゞェクト (アドむン、構成、プラグむン デヌタ゜ヌス、たたはコアホスト アプリケヌション) を .NET 6 に倉換したす。倉換ナヌティリティを䜿甚しお、C# ず VB.Net の䞡方の 2.x アドむン プロゞェクトを倉換できたす。

「Pro Migrate Project」倉換ナヌティリティを実行するず、続行するかどうかをナヌザヌに確認するメッセヌゞが衚瀺されたす。

MigrateUtility_YesNo.png

[Yes] が遞択されおいる堎合、倉換ナヌティリティは、アドむン プロゞェクトから .NET 6 ぞの関連する倉換を実行したす。ナヌザヌは、[migration completed successfully] プロンプトを確認し、Visual Studio プロンプトで [Reload] をクリックしおプロゞェクトを再読み蟌みする必芁がありたす。倉換埌:

  • 察象フレヌムワヌクは .NET 6.0 に倉曎されたす。
  • 出力アドむン .csproj たたは .vbproj は .NET プロゞェクト圢匏に倉換されたす (.NET Framework 圢匏ずは倧きく異なりたす)。
    • プロゞェクトの References フォルダヌは .NET Dependencies フォルダヌに倉曎されたす。
  • Config.daml の desktopVersion 属性が 3.x に倉曎されたす
  • プラグむンの堎合、version 属性は 3.x に倉曎されたす
  • プラグむンの堎合、language 属性は CLR:PluginDS に倉曎されたす。
  • Build Action "AddinContent" は Build Action "Content" に倉曎されたす。(詳现に぀いおは、AddinContent を参照しおください)
  • カスタム タヌゲットは、<Target Name="AfterBuild" ...> を陀いお倉曎されずにコピヌされたす。<Target Name="SignAddin" ...> に倉曎されたす。
  • Pro SDK Nuget リファレンスは、3.x Nuget リファレンスに曎新されたす。Pro SDK 3.x Nuget の詳现に぀いおは、ProGuide ArcGIS Pro Extensions Nuget を参照しおください。
  • プロゞェクトの xaml リ゜ヌス ディクショナリは、ビルド アクション "Resource" からビルド アクション "Page" に倉曎されたす。
  • 倖郚リンクは倖郚リンクのたたです。
  • サヌド パヌティの DLL 参照は倉換されたせん必芁に応じお、手動で远加する必芁がありたす。*

移行の最埌に、移行ステヌタス レポヌト (html および txt 圢匏の䞡方) が Visual Studio プロゞェクト TOC に远加されたす。 手動で解決する必芁がある、移行ツヌルが特定した未解決の倉換の問題がないか、移行ステヌタス レポヌトを確認したす。 䟋えば、Pro SDK Nuget リファレンスを 3.x に曎新したす。

*2.x Visual Studio プロゞェクトでサヌド パヌティの Nuget パッケヌゞ、たたは特定のカスタムたたは Microsoft 以倖の .NET Framework ラむブラリず dll を䜿甚するすべおのアドむンは、適切な .NET 6 盞圓物を参照するために必芁な倉曎を 手動で 行う必芁がありたす。

2.x アドむンの Visual Studio TOC の倉換前ず倉換埌のビュヌ:

addin-before-after2.png

倉換メモ

アドむンの倉換に関する远加の泚意事項。

タヌゲット フレヌムワヌク

アドむン .csproj および .vbproj のタヌゲット フレヌムワヌクは、珟圚 2.x で䜿甚しおいる .NET Framework のバヌゞョン (ほずんどの堎合、.NET Framework バヌゞョン 4.8) から .NET 6 に倉曎する必芁がありたす。Pro Migrate Project ナヌティリティは、タヌゲット フレヌムワヌクを自動的に倉曎したす。それ以倖の堎合は、手動で倉曎する必芁がありたす*。

*Visual Studio .NET Framework プロゞェクトず Visual Studio .NET (たたは ".NET Core") プロゞェクトの間には構造䞊の違いがありたす。Pro Migrate Project ナヌティリティを䜿甚しないこずを遞択した堎合は、.NET 6 タヌゲット フレヌムワヌク セットを䜿甚しお新しい Visual Studio 2022 アドむン プロゞェクトを䜜成し、関連する 2.x アドむン コンテンツを手動でコピヌする必芁がありたす。

Config.daml の desktopVersion ず Config.xml の version 属性

3.0 より前に䜜成されたアドむンず構成では、Config.daml の「desktopVersion」倀が 2.9 以䞋になりたす。3.0 より前に䜜成されたプラグむン デヌタ゜ヌスには、2.9 以䞋の Config.xml の <Target ...> 芁玠に version 属性がありたす。倉換ナヌティリティは、Config.daml desktopVersion および Config.xml version (プラグむン デヌタ゜ヌス甚) を 3.x に倉曎したす。それ以倖の堎合、これらの倉曎は手動で行う必芁がありたす。

バヌゞョン管理の詳现に぀いおは、Pro Concepts Advanced Topics, Add-in Versioning を参照しおください。

さらに、Pro Migrate Project ナヌティリティを䜿甚しお 2.x アドむンを 3.2 に移行する堎合、config.daml の dekstopVersion 属性が正しく蚭定されおいない可胜性がありたす。3.2 では、移行ツヌルが dekstopVersion 属性にビルド番号を 2 回曞き蟌んでいる可胜性がありたす。䟋えば、以䞋のスニペットでは、desktopVersion 属性のビルド番号が 3.2.0.49743 であるべきずころ、3.2.0.49743.49743 ず重耇しおいるこずに泚意しおください。

<AddInInfo id="{xxxx-xxx}" version="1.0" desktopVersion="3.2.0.49743.49743"

この問題を解決するには、単に desktopVersion 属性のビルド番号の重耇した倀を削陀したす。以䞋のスニペットは、desktopVersion 属性の正しいフォヌマットを瀺しおいたすビルド番号の重耇は削陀されおいたす

<AddInInfo id="{xxxx-xxx}" version="1.0" desktopVersion="3.2.0.49743"

泚この問題は、3.2 のPro Migrate Project ナヌティリティでのみ確認されおいたす。この問題は 3.0 たたは3.1 では確認されおいたせん。

Config.xml の language 属性

3.0 以降では、2x のConfig.xml の <AddIn language="CLR4.X.X" ...> 属性を CLR:PluginDS に倉曎する必芁がありたす。倉換ナヌティリティは、この倉曎を Config.xml に自動的に行いたす。それ以倖の堎合は、手動で倉曎する必芁がありたす。

Config.xml
<!-- before at 2.x -->
<AddIn language="CLR4.7.2" library="AcmePluginDatasource.dll" namespace="AcmePluginDatasource">
    <ArcGISPro>
      ...

<!-- at 3.x -->
<AddIn language="CLR:PluginDS" library="AcmePluginDatasource.dll" namespace="AcmePluginDatasource">
    <ArcGISPro>
      ...

AddinContent

3.0 以降では、カスタム Visual Studio ビルド アクション AddinContent はサポヌトされなくなりたした。 アドむン アヌカむブ内にカスタム コンテンツを埋め蟌むには、アドむンは代わりに組み蟌みのビルド アクション Content を䜿甚する必芁がありたす。

addin-content2.png

Pro SDK の "Pro Migrate Project" ツヌルは、倉換された .csproj および .vbproj で AddinContent タむプを Content に自動的に倉換したす。それ以倖の堎合、倉曎は手動で行う必芁がありたす。

<!-- At 2.x -->
 <ItemGroup>
   <AddInContent Include="ReadMe.md" />
 </ItemGroup>

<!-- At 3.x -->
<ItemGroup>
  <Content Include="ReadMe.md" />
</ItemGroup>

タヌゲット "AfterBuild"

アドむンたたは構成が .csproj たたは .vbproj 内で <Target Name="AfterBuild" ...> 芁玠を䜿甚しおいる堎合 (぀たり ProGuide Digitally Signed Addins and Configrations 2.x) に蚘茉されおいるずおりの堎合、その タヌゲット芁玠は、<Target Name="AfterBuild" DependsOnTargets="PackageArcGISContents"> から <Target Name="SignAddIn" AfterTargets="PackageArcGISContents"> に倉曎されたす。この倉曎は、前述の ProGuide for 3.x にも同様に反映されおいたす。

他のすべおの <Target ...> 芁玠は倉曎されずにコピヌされたす。䞊蚘の <Target Name="AfterBuild" ...> を含む all タヌゲット芁玠の内容も、倉曎されずにコピヌされたす (䟋えば、すべおの <Exec ...> 芁玠)。これらは、.NET に関連するタヌゲット コンテンツ自䜓の特異性に応じお、手動で倉曎する必芁がある堎合ずない堎合がありたす。

MSBuild での Target 芁玠の䜿甚の詳现に぀いおは、Target Element - MSBuild を参照しおください。

その他のカスタム コンテンツ

Resource、Content、AddinContent (䞊蚘参照)、たたは None ずしお远加されたカスタム .csproj たたは .vbproj コンテンツは、移行ツヌルによっお倉換された .csproj たたは .vbproj に移行されたす。「出力ディレクトリにコピヌ」蚭定も保持されたす*。

converted-content.png

* Visual Studio バヌゞョン 17.0.0  17.1.2 にバグがありたす。 出力ディレクトリにコピヌするず、アむテムのプロパティ りィンドりに垞に「なし」ず衚瀺されたす。 [出力ディレクトリにコピヌ] が適切に蚭定されおいるかどうかを刀断するには、.csproj たたは .vbproj ファむルのアむテム定矩を衚瀺したす。 以䞋の xml のようになりたす。

<!-- content type None, CopyToOutputDirectory 'Copy Always' -->
<ItemGroup>
    <None Include="Content\MS_Word_Doc.docx">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>

<!-- content type None, CopyToOutputDirectory 'Copy if Newer' -->
<ItemGroup>
    <None Include="Content\MS_Word_Doc.docx">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>

ペヌゞずしおマヌクされた XAML リ゜ヌス

Visual Studio 2019 | 2017 および .NET Framework プロゞェクトでは、xaml リ゜ヌス (぀たり、「リ゜ヌス ディクショナリ」) が「Resource」タむプのビルド アクションでプロゞェクトに远加されたす。Visual Studio 2022 および .NET 6 の堎合、xaml リ゜ヌスはビルド アクション「Page」ずしおマヌクする必芁がありたす。これには、DAML ギャラリヌずコンボ ボックスの xaml テンプレヌトが含たれたす。.NET 6 プロゞェクトで「Resource」ずしおマヌクされたたたの Xaml テンプレヌトは読み蟌たれず、パック Uri は null を返したす。

2x から 3.x に移行する堎合、移行ツヌルによっお xaml リ゜ヌスのビルド アクションが自動的に倉曎されたすが、アドむンを手動で倉換する堎合は、xaml リ゜ヌスがビルド アクション「Page」に倉曎されおいるこずを確認しおください。

resource-page.png

Visual Studio 2022 項目テンプレヌトを介しお 3.x で新しいリ゜ヌス ディクショナリを远加するず、Visual Studio は自動的に正しいビルド アクションを蚭定するため、新しい xaml リ゜ヌス参照を倉曎する必芁はありたせん。

サヌドパヌティのリファレンスず Esri 以倖の DLL

移行ツヌルは、特定の DLL 参照が .NET ず互換性があるかどうかを識別できたせん。したがっお、すべおのサヌド パヌティの参照 (぀たり、Esri 以倖) は、倉換された .csproj/.vbproj から陀倖されたす。アドむン開発者は、関連する参照を倉換されたプロゞェクトに手動で远加する必芁がありたす。 開発者は、同じ理由で Nuget パッケヌゞ参照を同様に远加し盎す必芁がある堎合もありたす。

未䜿甚のファむル

.NET 6 および Visual Studio 2022 では、既定で プロゞェクト フォルダヌ内のすべおの゜ヌス ファむルが自動的にビルドに含たれたす。.NET Framework Visual Studio 2017/2019 プロゞェクトでは、プロゞェクト フォルダヌに存圚するが、2.9 プロゞェクト ファむルで 明瀺的に 参照されおいない゜ヌス ファむルは、ビルドによっお無芖されるか、「䜿甚されたせん」。そのため、移行ツヌルがプロゞェクト フォルダヌ内に "未䜿甚" の゜ヌス ファむルを芋぀けた堎合、それらが .NET 6/3.x ビルドから陀倖されたたたになるように ".NotUsed" 拡匵子が远加されたす。 詳现に぀いおは、MSBuild EnableDefaultItems を参照しおください。

ロヌカルにコピヌ機胜が動䜜しない

ロヌカル コピヌは、Microsoft Visual Studio 2022 バヌゞョン 17.1.6 以前では正しく機胜したせん。ArcGIS Pro では、"CopyLocal=No" の蚭定を䜿甚しお、ArcGIS Pro アセンブリが远加のアヌカむブに曞き出されないようにしたす。基本的に、実行時に Pro アセンブリ参照がアドむン アセンブリ キャッシュに曞き蟌たれるこずは望たしくありたせん。代わりに、Pro アプリケヌションが (Pro bin フォルダヌから) 既に読み蟌んでいる Pro アセンブリをアドむンで䜿甚する必芁がありたす。さらに、"CopyLocal=No" は、アセンブリがアドむン アヌカむブに含たれないため、アドむン アヌカむブのサむズを倧幅に削枛したす。

この問題を解決するには、Visual Studio 2022 を 17.2 以䞊にアップグレヌドするこずをお勧めしたす。 Visual Studio 2022 をアップグレヌドした埌、アドむン プロゞェクトを "クリヌン" し、プロゞェクト内の "obj" フォルダヌが削陀されおいるこずを確認したす。.csproj たたは .vbproj 内のすべおの Pro アセンブリ参照プロパティを確認し、CopyLocal が No に蚭定されおいるこずを確認したす。プロゞェクトを再構築したす。

17.1.6 以䞋を䜿甚しおいる堎合、移行ツヌルは、移行䞭のアドむン プロゞェクトに既に存圚するアセンブリ参照のコピヌ ロヌカル動䜜を "修正" したす。ただし、远加のアセンブリ参照 (Esri 以倖の参照を含む) を移行の実行埌にプロゞェクトに远加し、CopyLocal = No の堎合は、手動で修正する必芁がありたす (Visual Studio 2022 を 17.1.2 にアップグレヌドしない限り)。

CopyLocal=No でアセンブリ参照を修正するには、関連するアセンブリ|アセンブリの .csproj/.vbproj ゚ントリを線集し、゚ントリに <Private>False</Private> を远加しお、CopyLocal=No の動䜜を匷制したす (泚: CopyLocal Yes\No はプロゞェクト ファむルに True|False ずしお保存されたす)。<Private> は、Copy Local を制埡するために䜿甚する適切な MSBuild のドキュメント化されたタグ です。<CopyLocal> タグが存圚する堎合、ignored になりたす。

修正前ず修正埌のアセンブリ参照の前埌の䟋を次に瀺したす。

これがデフォルトです - コピヌ ロヌカルが指定されおいないため、動䜜はデフォルトで true たたは "Yes" になりたす。

<Reference Include="ArcGIS.Desktop.Framework">
  <HintPathC:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll</HintPath>
</Reference>

この䟋では、ナヌザヌは VS 2022 UI を介しお UI で「CopyLocal=No」を蚭定しおいたす。VS 2022 がアセンブリ参照に「False」タグを远加しおいるこずに泚意しおください。これにより、Visual Studio UI が正しく同期されたすが、残念ながら、MSBuild では無芖され、アセンブリはずにかくロヌカルにコピヌされたす。これは Visual Studio の バグ で、"Private" タグの代わりに "CopyLocal" タグが远加されたす。「プラむベヌト」タグを䜿甚する必芁がありたす。

<Reference Include="ArcGIS.Desktop.Framework">
  <HintPathC:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll</HintPath>
  <CopyLocal>False</CopyLocal>  <!-- this tag is -ignored- -->
</Reference>

このリファレンスは、コピヌ ロヌカルを無効にするために、欠萜しおいる <Private>False</Private> タグを含むように手䜜業で修正する必芁がありたす。"" はコピヌ ロヌカルの動䜜を制埡するための MSBuildで文曞化されたタグ です。

<Reference Include="ArcGIS.Desktop.Framework">
  <HintPathC:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll</HintPath>
  <CopyLocal>False</CopyLocal>  <!-- this tag is -ignored- -->
  <Private>False</Private> <!-- to prevent copy local, this tag is -required- -->
</Reference>

必芁に応じお「CopyLocal」タグを削陀するこずもできたすが、UI の CopyLocal 遞択には空癜が衚瀺されたす (オプションが遞択されおいたせん)。

<Reference Include="ArcGIS.Desktop.Framework">
  <HintPathC:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll</HintPath> 
  <!-- to prevent copy local, this tag is -required- -->
  <Private>False</Private> <!-- note: CopyLocal tag has been deleted -->
</Reference>

ステップ 2 再コンパむルず API の重倧な倉曎点の修正

アドむンが倉換されたら、2 番目の手順ずしお、アドむンをコンパむルし、.NET 6 ぞの倉換に起因するすべおのコンパむラ ゚ラヌを修正したす。重倧な倉曎は、通垞、次の 4 ぀のカテゎリのいずれかに分類されたす。

  1. .NET Framework 4.x から .NET 6 ぞの切り替えに関連する倉曎 (マむナヌ)。Microsoft Windows 互換機胜パック nuget をプロゞェクトに远加する必芁がある堎合がありたす。
  2. 以前に 2.x リリヌスで廃止されたクラス、メ゜ッド、およびプロパティは、3.0 で 削陀 されたした。
  3. 3.0 の Pro API では、オブゞェクト ID が 64 ビット (ロング) ずしお定矩されるようになりたした。パブリック API のこの「extra width」は、ゞオデヌタベヌスおよび基盀ずなるデヌタベヌスの 64 ビット oid に察する珟圚および将来の倉曎に察応するためのものです。
  4. 䞀貫性、品質を改善し、重耇する機胜を削陀するための呜名、パラメヌタヌの順序などに関連する API の倉曎。これには、3.0 での CIM XML 氞続性の削陀に関連する重倧な倉曎も含たれたす。

コンパむラ ゚ラヌを修正するには、叀い参照 (クラス、メ゜ッド、プロパティ、列挙型など) を新しい参照に倉曎する必芁がありたす。これらの各カテゎリの抂芁は次のずおりです。

泚: Python ツヌルボックスやカスタム プロゞェクト、および 3.x で䜿甚するアプリケヌション プロパティなどのカスタム アドむン コンテンツの移怍に関連しお、厳密には API (重倧な) 倉曎ではなく、他の倉曎が必芁になる堎合がありたす。これらの考慮事項は、このドキュメントの 远加の移行に関する泚意事項 セクションで説明されおいたす。

.NET 6

.NET 6 ぞの切り替えに関連する重倧な倉曎は比范的軜埮ですが、圱響を受ける可胜性のある重倧な倉曎がいく぀か残っおいたす。䟋えば、.NET で利甚できない API たたはテクノロゞを䜿甚するサヌド パヌティのナヌザヌ コントロヌルたたはサヌド パヌティのラむブラリは、.NET の同等のコントロヌルたたはラむブラリに切り替える必芁がありたす。Windows 固有のテクノロゞに䟝存しおいたため、Microsoft によっお .NET に移怍されなかった API には、Windows レゞストリず GDI+ (䟋えば、System.Drawing) が含たれたす。完党なリストに぀いおは、.NET 6 における Microsoft の砎壊的倉曎 を参照しおください。

Microsoft Windows 互換機胜パック

Microsoft が提䟛する Windows 互換機胜パック Nuget をプロゞェクトに远加するず、.NET Framework から .NET ぞの重倧な倉曎の問題の倚くに自動的に察凊できたす。Windows 互換機胜パックの詳现に぀いおは、こちら を、Microsoft の .NET Framework から .NET ぞの移行、たたは「移怍」ガむドをに぀いおは こちら を参照しおください。 Pro SDK 3.x のサンプルずスニペットも、Windows 互換機胜パック Nuget を利甚しおいたす。アドむン内で䜿甚される可胜性のある、より䞀般的な Windows API のうち、Windows 互換機胜パックを必芁ずするものは System.Drawing ず Registry access の 2 ぀です。

非掚奚の型ずメンバヌ

非掚奚の型ずメンバヌは 3.0 で削陀されたした。非掚奚の型たたはメンバヌを䜿甚するず、以前は Visual Studio でコンパむラの譊告ずしお衚瀺されおいたした。非掚奚の型たたはメンバヌを参照するコヌドは、その代わりを䜿甚するように倉曎する必芁がありたす。以前に [Obsolete&#93 ずマヌクされたすべおの型ずメンバヌは削陀されたした。クラス、メ゜ッド、たたはプロパティがマヌクされおいる堎合、2.x で廃止されたコンテンツを参照しおいたアドむンは通垞、コンパむラの譊告 を受け取りたす。コヌド ベヌスで Obsolete 属性 を䜿甚したす。

パブリック API の重倧な倉曎に぀いおは、アセンブリの重倧な倉曎点 セクションで詳しく説明しおいたす。

64 ビットのオブゞェクト ID

ゞオデヌタベヌスの珟圚および将来の拡匵に察応しお、64 ビットのオブゞェクト ID (oids) を䜿甚できるようにするために、パブリック API は「oid」パラメヌタヌの参照ず戻り倀を Int32 から long に切り替えたした。これには、Selection.GetCount() topic7637.html。これは、この倉曎の圱響を受けるアドむンのコヌドでは、かなり機械的な倉曎になるはずです。暗黙的に型指定された倉数 を䜿甚するために var を䜿甚するアドむンに぀いおは、コンパむラが自動的に "var" の暗黙の型を int から long に倉曎するため、目立ったコヌドの倉化はありたせん。それ以倖の堎合、倉数 oid や "count" が明瀺的に int ずしお宣蚀されおいる堎合、アドむンは関連する倉数を long ずしお宣蚀するように適切な倉曎を行う必芁がありたす。long を int 倀に代入しようずするず、Cannot implicitly convert type 'long' to 'int'. An explicit conversion exists (are you missing a cast?) のようなコンパむラ ゚ラヌが発生したす。独自のデヌタ ストアやカスタム (非 esri) デヌタ ストアに oid 倀を栌玍するアドむンは、関連するスキヌマを倉曎しお、int 倀ではなく long 倀に察応する必芁がある堎合もありたす。

プラグむン デヌタ゜ヌス

プラグむン デヌタ゜ヌスのカスタム テヌブル テンプレヌト クラスは、ArcGIS.Core.Data.PluginDatastore.PluginTableTemplate から掟生する必芁がありたす。3.0 以降では、PluginTableTemplate も 64 ビット オブゞェクト ID を䜿甚したす。したがっお、必芁に応じおプラグむン デヌタ゜ヌスのカスタム コヌドに倉曎を加えお、64 ビット OID に察応する必芁がありたす。具䜓的には、PluginTableTemplate.GetNativeRowCount は long を返し、Search から PluginRow の [Values] で返されるコレクションの oid 倀も 64 ビット (぀たり long) である必芁がありたす。QueryFilter の ObjectIDs プロパティも long 型になりたす。

//At 2.x
 public override int GetNativeRowCount() {  
      //your implementation here...
      ...
 }

//3.x - note the return type
public override long GetNativeRowCount() {  
      //your implementation here...
      ...
 }

远加の API の重倧な倉曎点

远加の API の重倧な倉曎 (぀たり、.Net 6 での非掚奚のコンテンツ、および 64 ビット oid に関連するもの以倖の重倧な倉曎) には、次のものがありたす。

  • API の䞀貫性を向䞊させるための名前の倉曎たたは「倧文字/小文字」の倉曎。
  • 2.x リリヌスの過皋で䜜成された倚くのオヌバヌロヌドず関数の統合。むベントに぀いおも同様です。
  • パラメヌタず戻り倀の倉曎 (䟋: 配列から IEnumerable たたはリストぞ)
  • 堎合によっおは、3.0 での远加機胜たたは改善された機胜に察応するために、クラス、メ゜ッド、プロパティなどが名前倉曎ではなく眮き換えられおいたす。
  • 堎合によっおは、䞀貫性を向䞊させるためにクラスの名前空間が倉曎されおいたす。

䞻な重倧な倉曎に぀いおは、次の アセンブリの重倧な倉曎点 セクションで説明したす。

たた、ArcGIS Pro の CIM 氞続性モデルが 2.x の xml から 3.0 以降 の json に倉曎されたこずに関連する倉曎もありたす。CIM 氞続性の䜿甚に関連する倉曎に぀いおは、CIM の氞続性 セクションで説明したす。

その他のリ゜ヌス

この移行ガむドで提䟛される情報以倖にも、アドむン開発者は Pro SDK Community Samples や Pro Snippets を参照するず䟿利です。これらはすべお 3.x に倉換されおいたす。

API リファレンスの What's New for Developers at 3.0 には、3.0 で発生したすべおの API の倉曎の 完党な リストが含たれおいたす。

このセクションでは、3.x アドむンの移行を支揎するために、アセンブリごずに䞻芁な重倧な倉曎の抂芁を瀺したす。3.0 での API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Core.dll

CIM

3.0 では、アドむンは氞続化圢匏ずしお json を䜿甚する必芁がありたす。2.x で保存されおいたシリアラむズされた CIM xml を 3.x CIM オブゞェクト むンスタンスに倉換するには、アドむンは 3.0 で远加された ArcGIS.Core.CIM.XmlUtils.UpgradeAndDeserializeCIMObject(xml), topic 75062 を䜿甚する必芁がありたす。

CIM 氞続性の䜿甚に関する倉曎点は、CIM 氞続性 のセクションで詳しく説明されおいたす。しかし、基本的な䟋は次のずおりである。

 //At 2.x - persistence using xml - cimObject.ToXml()
 simpleRenderer.ToXml()
 //and the derived static CIMObject.FromXml() method
 //eg for CIMSimpleRenderer
 var simpleRenderer = CIMSimpleRenderer.FromXml(xml_string);

 //At 3.x
 //addins should use cimObject.ToJson()
 simpleRenderer.ToJson();
 //and the derived static CIMObject.FromJson() method
 //eg for CIMSimpleRenderer
 var simpleRenderer = CIMSimpleRenderer.FromJson(json_string);

//use to convert CIM xml previously persisted at 2.x -consult the 
//CIM Persistence section for more details
 var simpleRenderer = (CIMSimpleRenderer)ArcGIS.Core.CIM.XmlUtils.UpgradeAndDeserializeCIMObject(
                                                               simple_renderer_xml_from_2x);

3.0 では、CIMGenericView で䜿甚される XML 氞続性モデルに倉曎があり、TOCMapPaneProviderPane から掟生したカスタム マップ ペむン ビュヌ モデルを䜿甚したマップ ペむン停装の実装がありたした トピック 16597。カスタム マップ ペむンず停装マップ ペむンは、トピック 1481 の CIMGenericView ずしお保持されたす。.aprx 関連する倉曎に぀いおは、このドキュメントの カスタム CIMGenericView ず ViewXML セクションを参照しおください。

3.0 では、ArcGIS.Core.CIM.CIMObjectMarker3D が削陀されたした。アドむンは、代わりに ArcGIS.Core.CIM.CIMMglTFMarker3D を䜿甚する必芁がありたす。 GL Transmission Format (.glTF ファむル) は、3D モデルを転送するための業界暙準の亀換圢匏です。.glTF の詳现に぀いおは、こちら を参照しおください。さらに、CIMObjectMarker3D.ExportWeb3DObjectResource() メ゜ッドを䜿甚しお 3D Esri Javascript 圢匏で䜿甚するために 3D シンボルを json 圢匏に゚クスポヌトしおいた堎合は、代わりに Web スタむル (これらのマヌカヌ甚) の䜜成に切り替える必芁がありたす。Web スタむルを䜿甚した 3D シンボルの公開の詳现に぀いおは、次のオンラむン ドキュメントを参照しおください: Web スタむルの共有。たた、このブログ蚘事も参考になりたす: 3D シンボルを含む Web スタむルを公開する方法。

Data / Geodatabase

ゞオデヌタベヌスの珟圚および将来の拡匵に察応しお、64 ビットのオブゞェクト ID (oids) を䜿甚できるようにするために、パブリック API は「oid」パラメヌタヌの参照ず戻り倀を Int32 から long に切り替えたした。これには、レコヌド数ずフィヌチャ数も含たれ、long ずしおも返されるようになりたした。これに぀いおは、このドキュメントの前半の 64 ビットのオブゞェクト ID セクションで説明したした。

3.0 では、Reconcile ず Post に関する API が匷化されたした。Post は、パブリック API で Reconcile ずは別のアクションずしお実行できるようになりたした。これは、以前に ReconcileDescription クラスず version.Reconcile() メ゜ッドを䜿甚しおいたコヌドに圱響したす。詳现に぀いおは、ProConcepts Geodatabase を参照しおください。

 //At 2.x - 
 ReconcileDescription reconcileDescription = new ReconcileDescription(parentVersion);
 reconcileDescription.ConflictResolutionMethod = ConflictResolutionMethod.Continue; //continue if 
 reconcileDescription.WithPost = true;                                              //conflicts are found

 // Reconcile and post
 ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileDescription);
 ReconcileResult.HasConflicts can be checked as-needed


 //At 3.x use ReconcileOptions
 var reconcileOptions = new ReconcileOptions(parentVersion);
 reconcileOptions.ConflictResolutionMethod = ConflictResolutionMethod.Continue; //continue if 
                                                                                //conflicts are found
 reconcileOptions.ConflictDetectionType = ConflictDetectionType.ByRow; //Default
 reconcileOptions.ConflictResolutionType = ConflictResolutionType.FavorTargetVersion;//or FavorEditVersion

 // Reconcile and post as two separate actions
 ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileOptions);
 if (!reconcileResult.HasConflicts) {
   //No conflicts, perform the post
   var postOptions = new PostOptions(parentVersion);
   //var postOptions = new PostOptions(); for default version
   postOptions.ServiceSynchronizationType = ServiceSynchronizationType.Synchronous;//Default
   currentVersion.Post(postOptions);
 }

 //Reconcile and post as a single action (similar to 2.x)
 ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileOptions, postOptions);
 if (reconcileResult.HasConflicts) {
   //TODO resolve conflicts
 }

ArcGIS.Core.Data.GeodatabaseException から掟生し、ArcGIS.Core.Data.GeodatabaseException を含むすべおのゞオデヌタベヌス䟋倖クラスは、䞀貫性を保぀ために新しい名前空間 ArcGIS.Core.Data.Exceptions に移動されたした。

 //At 2.x
 using ArcGIS.Core.Data;
 ...
 try {
   ...
 } catch(GeodatabaseException ge) {

 //At 3.x
 using ArcGIS.Core.Data;
 using ArcGIS.Core.Data.Exceptions

 try {
   ...
 } catch(GeodatabaseException ge) {//or use explicit reference 
                                   //ArcGIS.Core.Data.Exceptions.GeodatabaseException 

Utility Network

名前空間 ArcGIS.Core.Data.UtilityNetwork.NetworkDiagrams は ArcGIS.Core.Data.NetworkDiagrams に眮き換わりたした。

Geometry

ゞオメトリず掟生ゞオメトリクラスの ToXML() メ゜ッドは ToXml() に名前が倉曎されたした (倧文字ず小文字の倉曎に泚意しおください)。ToXML() を参照しおいるアドむンは、代わりに ToXml() を参照するようにコヌドを倉曎する必芁がありたす。さらに、SpatialReferenceBuilder.FromXML() は SpatialReferenceBuilder.FromXml() に名前が倉曎されたした。

 //At 2.x
 var xml = geometry.ToXML();
 var xml = envelope.ToXML();
 var xml = mapPoint.ToXML();
 var xml = polygon.ToXML();
 var xml = polyline.ToXML();

//At 3.x
 var xml = geometry.ToXml();
 var xml = envelope.ToXml();
 var xml = mapPoint.ToXml();
 var xml = polygon.ToXml();
 var xml = polyline.ToXml();

ArcGIS.Core.Geometry.GeometryException および掟生するゞオメトリ䟋倖は、新しい名前空間 ArcGIS.Core.Geometry.Exceptions に移動されたした。既存のゞオメトリ䟋倖ぞの参照は、それに合わせお倉曎しおください。

 // At 2.x
 using ArcGIS.Core.Geometry;
 ...
 try {f
   ...
 } catch(GeometryException ge) {

 // At 3.x
 using ArcGIS.Core.Geometry;
 using ArcGIS.Core.Geometry.Exceptions

 try {
   ...
 } catch(GeometryException ge) {//or use explicit reference 
                                //ArcGIS.Core.Data.Exceptions.GeometryException 

3.x では、接頭蟞 esri を持぀ゞオメトリ列挙型は接頭蟞 Esri を持぀ように倉曎されるか、接頭蟞 esri が陀去されたした。これは、enum の倀も含みたす。

enum esriArcOrientation --> enum ArcOrientation  also, `esri` value prefix has been removed
enum esriClothoidCreateMethod -->enum ClothoidCreateMethod
enum esriCurveDensifyMethod -->enum CurveDensifyMethod
enum esriPatchType -->enum PatchType
enum esriTextureCompressionType -->enum TextureCompressionType

enum EsriShapeExportFlags --> all value prefixes changed from `esri` to `Esri`
enum EsriShapeImportFlags --> all value prefixes changed from `esri` to `Esri`

その他、enum の倉曎:

enum GeometryDimension --> enum GeometryDimensionType
enum JSONExportFlags --> enum JsonExportFlags - all value prefixes changed from `json` to `Json`
enum JSONImportFlags --> enum JsonImportFlags - all value prefixes changed from `json` to `Json`
enum Monotonic --> enum MonotonicType
enum SegmentExtension --> enum SegmentExtensionType
enum WKBExportFlags --> enum WkbExportFlags  - all value prefixes changed from `WKB` to `Wkb`

3.0 では、旧䞖代のゞオメトリおよびセグメント ビルダヌは削陀されたした。旧䞖代のビルダヌを䜿甚しおゞオメトリやセグメントを䜜成するアドむンは、新しい「Ex」ビルダヌを䜿甚するように倉曎する必芁がありたす。2.5+ からは、新䞖代のビルダヌ (ProConcepts-Geometry#second generation-builder-classes) がパブリック API に導入されおいたす。これらの「新しい」ビルダヌは、名前に「Ex」が远加されおおり、PolygonBuilderEx, PolylineBuilderEx, EnvelopeBuilderEx ずいったように、「新しい」ビルダヌが远加されおいたす。

新しいゞオメトリ ビルダヌずセグメント ビルダヌは、ビルダヌが MCT* で䜜成される必芁がなくなりたした。぀たり、QueuedTask* だけでなく、_任意のスレッド_で実行できたす。ビルダヌの「Ex」は IDisposable ではないため、叀いビルダヌの有効期間を using(....) ステヌトメントでスコヌプした 2.x コヌドは、新しいビルダヌを扱うずきに "using" を削陀する必芁がありたす。2.x アドむンは既にビルダヌ「Ex」を䜿甚しおおり、倉曎はありたせん。

//At        2.x          --->        3.0
class MapPointBuilder    --- > class MapPointBuilderEx
class MultipointBuilder  --- > class MultipointBuilderEx
 
class LineBuilder     --- > class LineBuilderEx
class EllipticArcBuilder    --- > class EllipticArcBuilderEx
class CubicBezierBuilder    --- > class CubicBezierBuilderEx
class PolylineBuilder    --- > class PolylineBuilderEx

class EnvelopeBuilder    --- > class EnvelopeBuilderEx
class PolygonBuilder    --- > class PolygonBuilderEx
class GeometryBagBuilder    --- > class GeometryBagBuilderEx

class MultipatchBuilder    --- > class MultipatchBuilderEx

//class SpatialReferenceBuilder is not replaced

これは、叀いビルダヌを䜿甚する 2.x アドむン コヌドの䟋であり、ビルダヌの「Ex」盞圓を䜿甚しお 3.0 コヌドに倉換されたす。

  //2.x
  QueuedTask.Run(() => {
     //Builders at 2.x are IDisposable - can scope lifetime with a "using" block
     using (PolylineBuilder polylineBuilder = new PolylineBuilder(polyline)) { 
       polylineBuilder.ReverseOrientation();
       var reversedPolyline = polylineBuilder.ToGeometry();
     }
  });

   QueuedTask.Run(() => {
     //Run on the MCT
     var circularArc = EllipticArcBuilderEx.CreateEllipticArcSegment(segment1, segment2, maxRadius, hintPoint);
     //etc
   });

 //At 3.x - no using(...) - Builder "Ex" are not IDisposable
 var polylineBuilder = new PolylineBuilderEx(polyline);
 polylineBuilder.ReverseOrientation();
 var reversedPolyline = polylineBuilder.ToGeometry();

  // Most of the BuilderEx convenience methods do not need the MCT.
  var circularArc = EllipticArcBuilderEx.CreateCircularArc(
                          segment1, segment2, maxRadius, hintPoint);

  //However, this particular EllipticArcBuilderEx constructor _does_ need the MCT. Please refer 
  //to the API reference as needed. There are only a handful of such cases
  QueuedTask.Run(() => {
    var cab = new EllipticArcBuilderEx(segment1, segment2, maxRadius, hintPoint);
    var otherCircularArc = cab.ToSegment();
    //etc
  });

泚: SpatialReferenceBuilder は、「Ex」に盞圓するものに眮き換えられたせん。Geometry API の詳现に぀いおは、ProConcepts: Geometry を参照しおください。

*MCT を必芁ずするビルダヌ Ex メ゜ッドずコンストラクタヌがただいく぀かありたす。これは、EllipticArcBuilderEx、PolylineBuilderEx および PolygonBuilderEx クラスです。残りのスレッド アフィニティは、今埌の 3.x リリヌスで削陀されたす。

Licensing

3.0 では、2.8 で廃止された LicensingInformation.IsAvailable(licenseCode) メ゜ッドが削陀されたした。アドむンは、代わりに LicenseInformation.IsCheckedOut(licenseCode) メ゜ッド トピック 72618 を䜿甚する必芁がありたす。

3.0 での API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.CoreHost.dll

3.0 での API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Catalog.dll

3.0 では、ArcGIS.Desktop.Catalog.OpenItemDialog.Items からの戻り倀が IEnumerable<Item> から IList<Item> に倉曎されたした。

ArcGIS.Desktop.Catalog.ItemFilters プロパティ はキャメル ケヌスに倉曎されおいたす。䟋えば、次のようになりたす。

//      At 2.x                  At 3.x
ItemFilters.annotation => ItemFilters.Annotation
ItemFilters.cad=>         ItemFilters.Cad
ItemFilters.composite_addToMap => ItemFilters.Composite_AddToMap 
...

3.0 での API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Core.dll

Cef ず Cef Sharp の䜿甚は 2.9 で廃止されたした。3.0 では、Cef はサポヌトされなくなりたした。メ゜ッド ProApp.InitializeCef() は削陀されたした。

ArcGISPortal メ゜ッドのスレッド制限が倉曎されたした。

ArcGIS.Desktop.Core.ArcGISPortal.SignIn(), topic 14680 が倉曎されたした。呌び出し元が構成の OnApplicationInitializing コヌルバック内にない限り、SignIn() は QueuedTask で呌び出されたす。このスレッド制限は 2.x では適甚されたせんでした。

ArcGIS.Desktop.Core.ArcGISPortal.SignOut(), topic 14682 が倉曎されたした。呌び出し元が構成の OnApplicationInitializing コヌルバック内にない限り、SignOut() は QueuedTask で呌び出されたす。このスレッド制限は 2.x では適甚されたせんでした。

ArcGIS.Desktop.Core.ArcGISPortal.GetSignOnUsername(), topic 14676 が倉曎されたした。呌び出し元が構成の OnApplicationInitializing コヌルバック内にない限り、GetSignOnUsername() は QueuedTask で呌び出されたす。このスレッド制限は 2.x では適甚されたせんでした。

ArcGIS.Desktop.Core.ArcGISPortal.GetToken(), topic 14677 が倉曎されたした。呌び出し元が構成の OnApplicationInitializing コヌルバック内にない限り、GetToken() は QueuedTask で呌び出されたす。このスレッド制限は 2.x では適甚されたせんでした。

3.0 でのカスタム アむテムの実装に関連する IMappableItem および IMappableItemEx ぞの倉曎に぀いおは、ArcGIS.Desktop.Mapping.dll を参照しおください。

3.0 での API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.DataReviewer.dll

3.0 での API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Editing.dll

3.0 では、(ArcGIS.Desktop.Editing.Templates.EditingTemplate, topic 9918) から掟生した掟生テンプレヌト クラス ArcGIS.Desktop.Editing.Templates.EditingFeatureTemplate が ArcGIS.Desktop.Editing.Templates.EditingRowTemplate, topic 76314 に倉曎されたした。これは、2.9 で導入されたスタンドアロン テヌブルでのテンプレヌトのサポヌトに察応するためです。EditingFeatureTemplate の基になる CIM 定矩、CIMEditingTemplate, topic 1174 を䜿甚した線集操䜜のオヌバヌロヌド クラスも倉わりたした。倉曎の倧郚分は、䞀貫性を向䞊させるための名前、スペル、および倧文字ず小文字の倉曎です。これには、ArcGIS.Core.CIM.CIMExtensions editing アセンブリ内のクラスで利甚可胜な線集テンプレヌトの extension メ゜ッドが含たれたす。2.x では、これらのメ゜ッドは ArcGIS.Core.CIM.EditingTemplateCIMExtensions クラスを介しお利甚可胜でした。

2.x の CIMEditingTemplate から掟生した CIMFeatureTemplate を䜿甚しおいるアドむンは、3.x の CIMRowTemplate, topic 74946 に参照を倉曎する必芁がありたす。

䟋は次のずおりです。

 using ArcGIS.Desktop.Editing.Templates;
 ...

 // retrieve the CIM edit template definition - CIMEditingTemplate
 var template = mapTool.CurrentTemplate;
 var templateDef = template.GetDefinition();

 //Property and extension method name changes
 //At 2.x 
 templateDef.ToolProgID = toolContentGUID;
 var toolIds = cimEditTemplate.GetExcludedToolDamlIds().ToList();
 cimEditTemplate.SetExcludedToolDamlIds(toolIds.ToArray());
 cimEditTemplate.AllowToolDamlID("esri_editing_SketchLineTool");

 //get a template definition the feature layer
 var resTemplate = featLayer.GetTemplate("Residential");
 var resTempDef = resTemplate.GetDefinition() as CIMFeatureTemplate;
 //use:    var newTemplate = new CIMFeatureTemplate(); to create a new one      

 //EditOperation.Merge(...)
 mergeFeatures.Merge(this.CurrentTemplate as EditingFeatureTemplate, featureLayer, 
                                                       new List<long>() { 10, 96, 12 });

 //At 3.x
 templateDef.DefaultToolGUID = toolContentGUID;
 var toolIds = cimEditTemplate.GetExcludedToolIDs().ToList();
 cimEditTemplate.SetExcludedToolIDs(toolIds.ToArray());
 cimEditTemplate.AllowToolID("esri_editing_SketchLineTool");

 //get a template definition the feature layer
 var resTemplate = featLayer.GetTemplate("Residential");
 var resTempDef = resTemplate.GetDefinition() as CIMRowTemplate;
 //use:    var newTemplate = new CIMRowTemplate(); to create a new one

 //EditOperation.Merge(...)
 mergeFeatures.Merge(this.CurrentTemplate as EditingRowTemplate, featureLayer, 
                                                       new List<long>() { 10, 96, 12 });

2.x では、ArcGIS.Desktop.Editing.Attributes.Inspector デフォルト コンストラクタヌからオプションの bool isFeatureEditing = true フラグが削陀されたした。3.0 では、Inspector は垞にむンスタンス化され、フィヌチャたたは行を曎新できるようになりたす。

 //at 2.x
 var insp = new Inspector(true | false);
 //At 3.x
 var insp = new Inspector();//isFeatureEditing = true is just assumed.

3.0 では、EditOperation.Create オヌバヌロヌドが ArcGIS.Desktp.Editing.RowToken を返すようになり, topic 19317、それを䜿っお新しく䜜成したフィヌチャの ObjectID ず GlobalID (線集操䜜が成功したずき) を取埗できるようになりたした。2.x では、オブゞェクト ID を取埗するには、Action<long> result パラメヌタを䜿甚する必芁がありたした。action パラメヌタは 3.x で削陀されたした。

泚: chaining 線集操䜜の際には、新しく䜜成されたフィヌチャ/行のオブゞェクト ID を取埗する必芁がありたす。

//At 2.x
long newFeatureID = -1;
editOp.Create(featLayer, poly, (oid) => newFeatureID = oid);
if (editOp.Execute()) {
   //operation executed successfully
   WriteToLog($"{featLayer.Name}: new feature: {newFeatureID}");

//At 3.x
long newFeatureID = -1;
var rowToken = editOp.Create(featLayer, poly);
if (editOp.Execute()) {
   //operation executed successfully
   long newFeatureID = (long)rowToken.ObjectID;
   WriteToLog($"{featLayer.Name}: new feature: {newFeatureID}");

2.x では、耇数の EditOperation クラスのメ゜ッドが、MapMembers の IEnumerable ず、察応するオブゞェクト ID のリスト IEnumerable<KeyValuePair<MapMember,List<long>>> をパラメヌタヌずしお䜿甚しおいたした。䟋: EditOperation.Split、EditOperation.Move、EditOperation.Rotate、EditOperation.Reshape、EditOperation.Scale、EditOperation.Delete など。この IEnumerable パラメヌタヌは、MapView.SelectFeatures などの MapView の 遞択メ゜ッドからの遞択出力ず䞀臎したした。MapView.SelectFeaturesEx。3.0 では、MapView の遞択は、䞀般的な .NET コレクションではなく、SelectionSet クラス によっおサポヌトされたす。2.x でゞェネリック .NET コレクション/IEnumerable を䜿甚しおいた線集操䜜は、3.0 で SelectionSet クラスを䜿甚するように倉曎されたした。SelectionSet 関連の倉曎に぀いおは、ArcGIS.Desktop.Mapping.dll セクションでも説明しおいたす。

 //At 2.x - construct an enumerable of key value pairs from the mapview selection
 var selFeatures = MapView.Active.GetFeatures(intersectPolygon).Select(
      k => new KeyValuePair<MapMember, List<long>>(k.Key as MapMember, k.Value));

 //pass to edit operation
 editOp.Split(selFeatures, ...);
 editOp.Move(selFeatures, ...);
 editOp.Rotate(selFeatures, origin, ...);
 editOp.Reshape(selFeatures, ...);
 editOp.Scale(selFeatures, ...);

 //At 3.x, MapView will return SelectionSet
 var selSet = MapView.Active.GetFeatures(intersectPolygon);

 //pass to edit operation
 editOp.Split(selSet, ...);
 editOp.Move(selSet, ...);
 editOp.Rotate(selSet, origin, ...);
 editOp.Reshape(selSet, ...);
 editOp.Scale(selSet, ...);

3.0 では、editOperation.IsCancelled フラグが editOperation.IsCanceled に倉曎されたした。

3.0 では、editOperation.Duplicate(...) が削陀されたした。2.x で editOperation.Duplicate を䜿甚するアドむンは、3.0 でコピヌ + 移動たたは䜜成 + 移動線集操䜜メ゜ッドの組み合わせを䜿甚する必芁がありたす。

 var editOp = new EditOperation();
 editOp.Name = "Duplicate Features";

 //At 2.x
 editOp.Duplicate(featureLayer, oid, 500.0, 500.0, 0.0);

 //At 3.x, use either of a copy + move or a create + move
 //in this example, an inspector is being used to access the feature attributes
 //
 var insp = new Inspector();
 insp.Load(featureLayer, oid);
 
 //make a copy using create + attributes
 var rtoken = editOp.Create(featureLayer, insp.ToDictionary(a => a.FieldName, a => a.CurrentValue));
 if (editOp.Execute())  {
    //do a move - chain to keep the two operations as a single undo
    var modifyOp = editOp.CreateChainedOperation();
    modifyOp.Modify(featureLayer, (long)rtoken.ObjectID, GeometryEngine.Instance.Move(geom, 500.0, 500.0));
    modifyOp.Execute();
 }

3.0 では、editOperation.Transform(...) ず editOperation.TransformAffine(...) が editOperation.Transform(...) のオヌバヌロヌドに眮き換えられたした topic 9562、[TransformMethod](https://pro.arcgis.com/en/pro-app/latest を䜿甚) /sdk/api-reference/topic76186.html)。3.0 以降では、TransformByLinkLayer たたは TransformByLinkLines - 倉換パラメヌタヌを定矩したす。transformMethod.TransformType を䜿甚しお、実行する倉換のタむプを定矩したす (TransformMethodType.Affine たたは TransformMethodType.Similarity)。

        
 var editOp = new EditOperation();
 editOp.Name = "Transform Features";

 //At 2.x 
 var transformSelection = MapView.Active.GetFeatures(polygon).Select(
                      k => new KeyValuePair<MapMember, List<long>>(k.Key as MapMember, k.Value));
 editOp.Transform(transformSelection, linkLayer);
 //Transform just a layer
 editOp.Transform(featureLayer, linkLayer);
 //Perform an affine transformation
 editOp.TransformAffine(featureLayer, linkLayer);

 //At 3.x
 //Define the transform method
 var affine_transform = new TransformByLinkLayer() {
    LinkLayer = linkLayer,
    TransformType = TransformMethodType.Affine //or TransformMethodType.Similarity
 };
 //Transform a selected set of features
 editOp.Transform(MapView.Active.GetFeatures(polygon), affine_transform);
 //Perform an affine transformation
 editOp.Transform(featureLayer, affine_transform);

 //Execute to execute the operation
 //Must be called within QueuedTask.Run
 editOp.Execute();
 
 //or use async flavor
 //await editOp.ExecuteAsync();

2.x では、䜜図ツヌルは EmbeddableControl を䜿甚しお、構成可胜なカスタム UI をフィヌチャ䜜成ペむンずテンプレヌト UI 内にホストできたした。埋め蟌み可胜コントロヌルは、IEditingCreateToolControl および IEditingCreateToolMultiple を実装しお、フィヌチャ䜜成ペむンおよび/たたはテンプレヌトのプロパティ ダむアログ UI に埋め蟌み可胜コントロヌル UI をホストしたす。

3.0 では、IEditingCreateToolControl ず IEditingCreateToolMultiple が削陀されたした。代わりに、 (Embeddable コントロヌル内に実装された) 構成可胜な UI を持぀䜜図ツヌルは、その埋め蟌み可胜なコントロヌルに察しお ToolOptionsEmbeddableControl を掟生させ、関連するオヌバヌラむドを実装する必芁がありたす。

\\At 2.x - embeddable controls associated with construction tools
\\implement IEditingCreateToolControl and IEditingCreateToolMultiple to
\\display configurable UIs
internal class CustomToolToolOptionsViewModel : EmbeddableControl, 
                IEditingCreateToolControl {//most common
   ...

internal class CustomToolToolOptionsViewModel : EmbeddableControl, 
      IEditingCreateToolControl, IEditingCreateToolMultiple {//less common - tool supports multiple templates
  ...


\\At 3.x, derive from ToolOptionsEmbeddableControl, no interfaces needed
internal class CustomToolToolOptionsViewModel : ToolOptionsEmbeddableControl {

 //Occurs when a tool options control is initialized
 public override void OnInitialize(ToolOptions options, bool hostIsActiveTmplatePane) {
    //TODO
    base.OnInitialize(options, hostIsActiveTmplatePane);
  }
  //Occurs when a tool options control is initialized
  public override void OnInitialize(IEnumerable<ToolOptions> optionsCollection, 
                                    bool hostIsActiveTmplatePane) {
    //TODO - handle when the tool options control is initialized
  }

  //Gets and sets the valid state of the tool options - default is true
  public virtual bool IsValid { get; set; } = true;

  //Gets and sets the dirty state of the tool options - default is false
  public virtual bool IsDirty { get; set; }

  //Gets and sets whether the tool options should auto open in the Active Template 
  //pane when the associated tool is activated - default is false
  public virtual bool IsAutoOpen(string toolID) => false;

  //Gets the icon to display when the tool options are displayed in the Active Template pane.
  public override ImageSource SelectorIcon => ... ;

  //Gets a working copy of the ToolOptions
  protected internal ToolOptions ToolOptions { get; }

  // Called at the end of <see cref="OpenAsync"/>, implementations should obtain and interpret the 
  //options stored in the current <see cref="ToolOptions"/> using
  //protected T GetToolOption<T>(string key, T defaultValue, T differentValue = default(T))
  protected override Task LoadFromToolOptions() {
      //eg, this tool checks if it has a stored default value for a "Buffer" option
      double? buffer = GetToolOption<double?>("Buffer", 25.0, null);
      if (buffer.HasValue) {//there is a default
         ...
      }
      return Task.CompletedTask;
    }

2.x での IEditingCreateToolControl メ゜ッドの実装:

  • public virtual bool InitializeForActiveTemplate(ToolOptions options)
  • public virtual bool AutoOpenActiveTemplatePane(string toolID)

埋め蟌み可胜なコントロヌルでこれらの ToolOptionsEmbeddableControl オヌバヌラむドを䜿甚したす。

  • public override void OnInitialize(IEnumerable<ToolOptions> optionsCollection, bool hostIsActiveTemplatePane)
  • public override bool IsAutoOpen(string toolID)

Config.daml では、埋め蟌み可胜なコントロヌルは esri_editing_tool_options カテゎリに登録され、daml-id は 2.x で行われたのず同じ䜜図ツヌルの content タグの toolOptionsID 属性に割り圓おられたす。

ArcGIS.Desktop.Extensions.dll

3.0 では、ArcGIS.Desktop.Extensions.Controls.BurgerButton コントロヌルが削陀されたした。 ドッキング りィンドり (ハンバヌガヌ ボタン付き) コントロヌルをただ参照しおいる 2.x アドむンは、ArcGIS.Desktop.Framework.Controls.BurgerButton に切り替える必芁がありたす。「Framework」のドッキング りィンドり (ハンバヌガヌ ボタン付き) コントロヌルは、2.2、2.3 タむムフレヌムで元の「Extensions」コントロヌルを眮き換えたした。

ドッキング りィンドり (ハンバヌガヌ ボタン付き) コントロヌルは、ポップアップ メニュヌのドッキング りィンドり内で䜿甚されたす。ほずんどの堎合、ドッキング りィンドり ナヌザヌ コントロヌル xaml で参照されたす。次に䟋を瀺したす。

<!-- change this at 2.x -->
<UserControl x:Class="DockPaneBookmarkAdvanced.BookmarkView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  ...                          
  xmlns:extensionsControls="clr-namespace:ArcGIS.Desktop.Extensions.Controls;assembly=ArcGIS.Desktop.Extensions"
  ... >

<!-- to this at 3.x -->
<UserControl x:Class="DockPaneBookmarkAdvanced.BookmarkView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  ...                          
  xmlns:extensionsControls="clr-namespace:ArcGIS.Desktop.Framework.Controls;assembly=ArcGIS.Desktop.Framework"
  ... >

3.0 の API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Framework.dll

3.0 では、2.9 で廃止された ArcGIS.Desktop.Framework.Controls.ChromiumWebBrowser コントロヌルが削陀されたした。アドむンは代わりに ArcGIS.Desktop.Framework.Controls.WebViewBrowser コントロヌル を䜿甚する必芁がありたす。

3.x では、アプリケヌションのタむトルず名前の動䜜が倉曎されたした。3.x では、FrameworkApplication.Title が指定されおいる堎合、アプリケヌションのタむトル バヌはデフォルトでタむトルのみを衚瀺し、名前ずサブタむトルは衚瀺されたせん。

//At 2.x, this code would show Name-Title-Subtitle
//At 3.x, only title will show.
 var date_time = System.DateTime.Now.ToString("g");
 FrameworkApplication.Name = date_time;
 FrameworkApplication.SubTitle = "MyMap";
 FrameworkApplication.Title = Project.Current.Name;

app-title1.png

//At 3.x, title is set to "", title defaults to FrameworkApplication.Name
 var date_time = System.DateTime.Now.ToString("g");
 FrameworkApplication.Name = date_time;
 FrameworkApplication.SubTitle = "MyMap";
 FrameworkApplication.Title = "";//no title

app-title2.png

//At 3.x Subtitle is ignored in the bar
 var date_time = System.DateTime.Now.ToString("g");
 FrameworkApplication.Name = "";//no name
 FrameworkApplication.SubTitle = "MyMap";
 FrameworkApplication.Title = "";//no title

app-title3.png

3.x では、Configurations ず ConfigurationManager の新しいタむトルの動䜜により、ConfigurationManager.ApplicationName がタむトル バヌに衚瀺されたす。2.x では、ConfigurationManager.ApplicationName を䜿甚しおタむトル バヌのテキストをオヌバヌラむドできたした。ただし、3.x では、タむトル バヌにはアプリケヌション title (タむトルが定矩されおいる堎合) しか衚瀺されないため、構成の ApplicationName は ignored になりたす。3.x で ApplicationName を衚瀺するには、構成で新しい TitleBarText のオヌバヌラむドを実装する必芁がありたす。

configManager.TitleBarText プロパティの䞀郚ずしお configManager.ApplicationName を含めたす。これに぀いおは、ProConcepts Configurations、TitleBarText セクションで詳しく説明しおいたす。

3.0 では、(files を参照するのではなく) フォルダヌを参照するための ArcGIS.Desktop.Framework.Dialogs.BrowseForFolder が削陀されたした。アドむンは、代わりに Windows API ず System.Windows.Forms.FolderBrowserDialog を䜿甚する必芁がありたす。以䞋に䟋を瀺したす。

using System.Windows.Interop;// for WindowInteropHelper


//Get a handle to the Pro app window
var parentWindow = new WindowInteropHelper(
    FrameworkApplication.Current.MainWindow).Handle;

//At 2.x
//using ArcGIS.Desktop.Framework.Dialogs;
//
//var browseDialog = new BrowseForFolder();
//var selectedFolder = browseDialog.SelectFolder(
//      "Please select an output folder", @"C:\\The\\Initial\\Path", IntPtr.Zero);
//....or, use the Pro application window handle
//var selectedFolder = browseDialog.SelectFolder(
//     "Please select an output folder", @"C:\\The\\Initial\\Path", parentWindow);

//At 3.x
using System.Windows.Forms;
...

var parentWindow = new WindowInteropHelper(
    FrameworkApplication.Current.MainWindow).Handle;

var browseDialog = new FolderBrowserDialog() {
  InitialDirectory = @"C:\\The\\Initial\\Path",
  Description = "Please select an output folder",
  UseDescriptionForTitle = true
};
var selectedFolder = "";
if (folderBrowserDialog1.ShowDialog(
      new WindowWrapper(parentWindow)) == DialogResult.OK) {
   selectedFolder = folderBrowserDialog1.SelectedPath;
}
//TODO - use selected folder path
...

// http://stackoverflow.com/questions/315164/how-to-use-a-folderbrowserdialog-from-a-wpf-application
public class WindowWrapper : System.Windows.Forms.IWin32Window {
  IntPtr _handle = IntPtr.Zero;

  public WindowWrapper(IntPtr handle) {
    _handle = handle;
  }
 IntPtr System.Windows.Forms.IWin32Window.Handle => _handle;
}

3.0 の API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Geoprocessing.dll

3.0 では、2.1 で廃止された ArcGIS.Desktop.Geoprocessing.HistoryProjectItem が削陀されたした。

3.0 の API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

Esri.ArcGIS.ItemIndex.dll

3.0 の API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Layout.dll

3.0 では、LayoutElementFactory の名前が ElementFactory に倉曎されたした, topic 76396。

たた、2.x では、LayoutElementFactory は、GraphicElement 䜜成 (぀たり、ポむント、ラむン、ポリゎン、およびテキスト グラフィック ゚レメント) 甚の非垞に粗粒床のマクロを倚数提䟛したした。これらのマクロは、2぀の汎甚マクロに統合されたした。ポむント、ラむン、ポリゎンは CreateGraphicElement 、テキストは CreateTextGraphicElement で䜜成されたす。CreateGraphicElement ず CreateTextGraphicElement は、3.x で新しいパラメヌタ クラスである ElementInfo を受け取り、゚レメントの䜜成時に、いく぀かの初期プロパティを前もっお指定するこずができるようになりたした。

2.x では、Layouts、GroupElements、GraphicsLayer を異なるコンテナヌずしお䜿甚するには、個別の LayoutElementFactory マクロのオヌバヌロヌドが必芁でした。Layout および GroupElement マクロには、ILayoutElementContainer 型の第䞀匕数を持ち、GraphicsLayer には、GraphicElementContainer 型の第䞀匕数を持っおいたした。3.0 では、ILayoutElementContainer ず GraphicElementContainer は IElementContainer 型の単䞀のコンテナに眮き換えられたした, topic 76912 したがっお、ElementFactory を䜿うずきに 3.0 で異なるコンテナを区別する必芁がなくなりたした。

Examples follow:

//At 2.x
QueuedTask.Run(()=> {
   //Create point, line, polygon graphic elements - we typically match specific geometries 
   //with specific macros. Overloads for layout, group element, graphics layer as the container
   LayoutElementFactory.Instance.CreateGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateGraphicElement(layout, graphic);
   LayoutElementFactory.Instance.CreatePointGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateLineGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreatePolygonGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateBezierCurveGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateCircleGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateEllipseGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateFreehandGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateLassoGraphicElement(layout, ...);
   LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, ...);

   //At 3.x use CreateGraphicElement with (optional) ElementInfo. No need for separate
   //overloads for layout, group element, graphics layer as the container at 3.x
   var container = ....;//Layout, GroupElement, or GraphicsLayer
   
   ElementFactory.Instance.CreateGraphicElement(container, bezPl, lineSym, "New Bezier Curve");
   ElementFactory.Instance.CreateGraphicElement(container, linePl, lineSym, "New Freehand");
   ElementFactory.Instance.CreateGraphicElement(container, env, polySym, "New Polygon");
   
   //and with ElemInfo...
   var elemInfo = new ElementInfo() {
     Anchor = Anchor.CenterPoint,
     Rotation = 45
   };
   ElementFactory.Instance.CreateGraphicElement(container, env, polySym, "New Polygon", true, elemInfo);

   //Or, instead of a geometry + symbol, use a CIMGraphic
   var graphic = new CIMPointGraphic() { ..... };
   ElementFactory.Instance.CreateGraphicElement(container, graphic);

   //At 2.x - create text graphic elements
   LayoutElementFactory.Instance.CreateCurvedTextGraphicElement(container, ...);
   LayoutElementFactory.Instance.CreatePointTextGraphicElement(container, ...);
   LayoutElementFactory.Instance.CreateCircleParagraphGraphicElement(container, ...);
   LayoutElementFactory.Instance.CreatePolygonParagraphGraphicElement(container, ...);
   LayoutElementFactory.Instance.CreateEllipseParagraphGraphicElement(container, ...);
   LayoutElementFactory.Instance.CreateRectangleParagraphGraphicElement(container, ...);

   //At 3.x - use CreateTextGraphicElement and TextType enum to specify the type of
   //text to create
   ElementFactory.Instance.CreateTextGraphicElement(
      container, TextType.SplinedText, bezPl, sym, "Curved Text", "New Splined Text");
   ElementFactory.Instance.CreateTextGraphicElement(
      container, TextType.RectangleParagraph, poly, sym, text, "New Polygon Text");
   ElementFactory.Instance.CreateTextGraphicElement(
      container, TextType.CircleParagraph, polyCir, sym, text, "New Circle Text");

   //and with ElementInfo
   var elemInfo = new ElementInfo() {
      Anchor = Anchor.CenterPoint,
      Rotation = 45
   };
   ElementFactory.Instance.CreateTextGraphicElement(
          container, TextType.PointText, coord2D.ToMapPoint(), sym, textString, "New Point Text", true, elemInfo);

   //At 2.x - create map frame and associated surrounds
   LayoutElementFactory.Instance.CreateMapFrame(layout, env, mfMap);

   LayoutElementFactory.Instance.CreateLegend(layout, env, mapFrame);
   LayoutElementFactory.Instance.CreateScaleBar(layout, center, mapFrame, sbStyleItm);
   LayoutElementFactory.Instance.CreateNorthArrow(layout, center, mapFrame, naStyleItm);
   LayoutElementFactory.Instance.CreateTableFrame(layout, env, mapFrame, featLayer, layerFields);
   LayoutElementFactory.Instance.CreateChartFrame(layout, ...);

   //At 3.x, use CreateMapFrameElement and CreateMapSurroundElement along with the
   //relevant ArcGIS.Desktop.Layouts.MapSurroundInfo
   var mfElm = ElementFactory.Instance.CreateMapFrameElement(layout, env, map, "New Map Frame");
   
   var legInfo = new LegendInfo() { MapFrameName = mfElm.Name};
   var sbInfo = new ScaleBarInfo() { MapFrameName = mfElm.Name, ScaleBarStyleItem = sbStyleItm};
   var naInfo = new NorthArrowInfo() { MapFrameName = mfElm.Name, NorthArrowStyleItem = naStyleItm};
   var tfInfo = new TableFrameInfo() { MapFrameName = mfElm.Name, 
                                          MapMemberUri = featLayer.URI, FieldNames = layerFields};
   var cfInfo = new ChartFrameInfo() { MapFrameName = mfElm.Name, MapMemberUri = featLayer.URI};

   var legendElm = ElementFactory.Instance.CreateMapSurroundElement(
                         layout, env, legInfo, "New Legend") as Legend;
   var sbElm = ElementFactory.Instance.CreateMapSurroundElement(
                      layout, center.ToMapPoint(), sbInfo, "New Scale Bar") as ScaleBar;
   var arrowElm = ElementFactory.Instance.CreateMapSurroundElement(
                         layout, center.ToMapPoint(), naInfo, "New North Arrow") as NorthArrow;
   var tabFrame = ElementFactory.Instance.CreateMapSurroundElement(
                         layout, env, tfInfo) as TableFrame;
   var chartFrame = ElementFactory.Instance.CreateMapSurroundElement(
                         layout, env, cfInfo) as ChartFrame;

   //At 2.x - CreateGroupElement has an overload that takes a single element (to be "grouped)
   LayoutElementFactory.Instance.CreateGroupElement(container, titleElm);

   //At 3.x, a list of elements to be grouped must be provided
   ElementFactory.Instance.CreateGroupElement(container, new List<Element>() { titleElm });

3.x では、レむアりトず゚レメントのむベントが統合され、アドむン開発者が (レむアりトず゚レメントの状態およびコンテキストの倉曎をリッスンするために) 消費しなければならないむベントの数が枛りたした。3.x では、アドむン開発者は次の 3 ぀のむベントにサブスクラむブするだけで枈みたす。LayoutEvent topic76584.html, LayoutViewEvent topic18642.html および ElementEvent topic76570.html.

LayoutAdded ず LayoutRemoved の同等性に぀いおは、アドむンは 3.0 で ArcGIS.Desktop.Core.Events.ProjectItemsChangedEvent を䜿甚する必芁がありたす。

 //Layout events
 //   At 2.x         --        At 3.x
 LayoutAddedEvent       ProjectItemsChangedEvent, hint: NotifyCollectionChangedAction.Add
 LayoutRemovedEvent     ProjectItemsChangedEvent, hint: NotifyCollectionChangedAction.Remove
 LayoutChangedEvent     LayoutEvent, hint: LayoutEventArgs.LayoutEventHint
 LayoutClosing          LayoutViewEvent, hint: LayoutViewEventArgs.LayoutViewEventHint.Closing
 LayoutClosed           LayoutViewEvent, hint: LayoutViewEventArgs.LayoutViewEventHint.Closed

 LayoutPauseDrawingChangedEvent       LayoutViewEvent, 
                            hint: LayoutViewEventArgs.LayoutViewEventHint.PauseDrawingChanged

 LayoutViewEvent        LayoutViewEvent, hint: LayoutViewEventArgs.LayoutViewEventHint
 MapSeriesEvent         LayoutEvent, hint: LayoutEventArgs.LayoutEventHint
 PageChangedEvent       LayoutEvent, hint: LayoutEventArgs.LayoutEventHint

 ActiveLayoutViewChangedEvent  LayoutViewEvent, 
                        hint: LayoutViewEventArgs.LayoutViewEventHint.Activated, Deactivated

 ActiveMapFrameEvent    **ElementEvent** (not LayoutViewEvent)
                     hint: ElementEventArgs.ElementEventHint.MapFrameActivated, MapFrameDeactivated

 //Element events
 //   At 2.x         --        At 3.x
 ElementAddedEvent      ElementEvent, hint: ElementEventArgs.ElementEventHint.ElementAdded
 ElementRemovedEvent    ElementEvent, hint: ElementEventArgs.ElementEventHint.ElementRemoved
 ElementsUpdatedEvent   ElementEvent, hint: ElementEventArgs.ElementEventHint

 ElementStyleChangedEvent  ElementEvent, hint: ElementEventArgs.ElementEventHint.StyleChanged
 ElementsPlacementChangedEvent  ElementEvent, hint: ElementEventArgs.ElementEventHint.PlacementChanged

 //At 2.x
 LayoutSelectionChangedEvent    (deprecated at 2.6)
 ArcGIS.Desktop.Mapping.Events.ElementSelectionChangedEvent

 // At 3.x use:
 ElementEvent, hint: ElementEventArgs.ElementEventHint.SelectionChanged

3.x では、ReportElementFactory マクロ が倉曎され、IElementContainer 型のコンテナヌを䜿甚するようになりたした。

3.0 の API の倉曎点の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Mapping.dll

3.0 では、LayerFactory のレむダヌ䜜成マクロが LayerCreationParams クラスず関連する掟生䜜成の "param" クラスに統合されたした。「param」クラスは、元の個々のレむダヌ䜜成マクロ (それらが眮き換える) よりも幅広い䜜成プロパティを提䟛したす。蚭定された「param」クラスは、CreateLayer<t> に枡されたす。オヌバヌロヌド を䜿甚しおレむダヌを䜜成したす。「T」たたはテンプレヌト化されたタむプは、䜜成するレむダヌ タむプに眮き換える必芁がありたす (適切なレむダヌ䜜成「param」クラスず䞀臎する必芁がありたす)。 2.x の create "XXX" レむダヌ マクロのいずれかを呌び出すアドむンは、3.0 で LayerCreationParam パタヌンを䜿甚するように切り替える必芁がありたす。

3.xでは、LayerCreationParamsにMapMemberIndexずMapMemberPositionプロパティが含たれるようになりたした。以前、2.x では、これらは様々な LayerFactory のレむダヌ䜜成マクロのオヌバヌロヌドで個別のパラメヌタずしお蚭定されおいたした。

䟋は次のずおりです。

 //At 2.x CreateLayer<T>(...) does not include a LayerPosition position default parameter
 //At 3.0, addins should use the LayerCreationParams MapMemberPosition instead.

 //At 2.x - Addins using
 LayerFactory.Instance.CreateLayer(item, ....);
 LayerFactory.Instance.CreateLayer(cimDataConnection, ....);

 //should use layer creation params.
 //Note: set MapMemberIndex or MapMemberPosition on the LayerCreationParams
 //if the addin was using the relevant parameter at 2.x
 var layerParams = new LayerCreationParams(item | cimDataConnection) { 
                         MapMemberIndex = -1 
                       };
 var layer = LayerFactory.Instance.CreateLayer<Layer>(layerParams, ...);
 
 //Note, 3.x provides the following overload of CreateLayer for scenarios where
 //addins want to create a layer via a path or Uri to the underlying data source
 Layer CreateLayer(Uri dataUri, ILayerContainerEdit container, int index = 0, string layerName = "");

 //At 2.x - Addins using
 LayerFactory.Instance.CreateFeatureLayer(featClass, ....);
 LayerFactory.Instance.CreateFeatureLayer(item, ....);
 LayerFactory.Instance.CreateFeatureLayer(uri, ....);
 LayerFactory.Instance.CreateFeatureLayer(cimDataConnection, ....);

 //At 3.x
 //use feature layer creation params
 //Note: set MapMemberIndex, MapMemberPosition, and RendererDefinition on the 
 //FeatureLayerCreationParams if the addin was using the relevant Create method parameter at 2.x
 var layerParams = new FeatureLayerCreationParams(featClass |item | uri | cimDataConnection) { 
                           MapMemberPosition = MapMemberPosition.AddToBottom 
                       };
 var layer = LayerFactory.Instance.CreateLayer<FeatureLayer>(layerParams, ...);

 //At 2.x - Addins using
 LayerFactory.Instance.CreateRasterLayer(item, ....);
 LayerFactory.Instance.CreateRasterLayer(uri, ....);
 LayerFactory.Instance.CreateRasterLayer(cimDataConnection, ....);

 //At 3.x, should use raster layer creation params.
 //Note: set MapMemberIndex, MapMemberPosition, and ColorizerDefinition on the 
 //RasterLayerCreationParams if the addin was using the relevant Create method parameter at 2.x
 var layerParams = new RasterLayerCreationParams(raster |item | uri | cimDataConnection) { 
                           MapMemberPosition = MapMemberPosition.AddToBottom 
                       };
 var layer = LayerFactory.Instance.CreateLayer<BasicRasterLayer>(layerParams, ...);
 
 //At 2.x - Addins using
 LayerFactory.Instance.CreateMosaicLayer(item, ....);
 LayerFactory.Instance.CreateMosaicLayer(uri, ....);
 LayerFactory.Instance.CreateMosaicLayer(cimDataConnection, ....);

 //At 3.x, should use mosaic layer creation params.
 //Note: set MapMemberIndex, MapMemberPosition, and ColorizerDefinition on the 
 //MosaicLayerCreationParams if the addin was using the relevant Create method 
 //parameter at 2.x
 var layerParams = new MosaicLayerCreationParams(item | uri | cimDataConnection) { 
                           MapMemberPosition = MapMemberPosition.AddToBottom 
                       };
 var layer = LayerFactory.Instance.CreateLayer<MosaicLayer>(layerParams, ...);

 //At 3.x CreateGroupLayer is unchanged
 LayerFactory.Instance.CreateGroupLayer(map, 0, "Group 1");//same as was at 2.x

3.x では、StandaloneTableFactory メ゜ッドのオヌバヌロヌドは StandaloneTableCreationParams を消費する CreateStandaloneTable メ゜ッドに統合されおいたす。URI を受け取る CreateStandaloneTable の䟿利なオヌバヌロヌドは、ただ 3.x のたたです。

䟋は次のずおりです。

 //At 2.x
 //use a local path uri
 var table = StandaloneTableFactory.Instance.CreateStandaloneTable(
            new Uri(@"C:\Temp\Data\SDK.gdb\EarthquakeDamage", UriKind.Absolute), map);

 //GDB table
 var table2 = StandaloneTableFactory.Instance.CreateStandaloneTable(gdb_table, map);
 //Item
 var item = ItemFactory.Instance.Create(@"C:\Temp\Data\SDK.gdb\ParcelOwners");
 var table3 = StandaloneTableFactory.Instance.CreateStandaloneTable(item, map);

 //StandaloneTableCreationParams, eg with Item
 var tableParams = new StandaloneTableCreationParams(item);
 var table4 = StandaloneTableFactory.Instance.CreateStandaloneTable(tableParams, map);

 //At 3.x
 //use a local path uri
 var table = StandaloneTableFactory.Instance.CreateStandaloneTable(
            new Uri(@"C:\Temp\Data\SDK.gdb\EarthquakeDamage", UriKind.Absolute), map);
 
 //At 3.x
 //Use StandaloneTableCreationParams - Uri, Item, Table, CIMDataConnection, CIMLayerDocument
 var tableCreationParams = new StandaloneTableCreationParams(uri);
 var tableCreationParams2 = new StandaloneTableCreationParams(gdb_table);
 var tableCreationParams3 = new StandaloneTableCreationParams(dc);
 var tableCreationParams4 = new StandaloneTableCreationParams(layerDoc);
        
 var table = StandaloneTableFactory.Instance.CreateStandaloneTable(tableCreationParams, map);

3.x では、BasicFeatureLayer のク゚リ定矩が倉曎されたした。2.x ず同様に、ク゚リ定矩の機胜は ITableDefinitionQueries むンタヌフェむスを介しお提䟛されたす。ク゚リ定矩は、CIMDefinitionFilter クラス, topic 21490 を䜿甚しお、そのむンタヌフェむスを介しお線集および定矩されたした。たた、3.0 では、2.5 で廃止された public CIMDefinitionFilter[] BasicFeatureLayer.DefinitionFilterChoices プロパティが削陀されたした。

3.x では、ただ CIMDefinitionFilter は公開されおいたすが、CIMDefinitionFilter ず非垞に䌌た新しいモデル クラスDefinitionQueryを、フィルタヌ定矩に䜿甚したす。

//At 2.x, using CIMDefinitionFilter
var defFilter = new CIMDefinitionFilter() {
  Name = "California",
  DefinitionExpression = "STATE_NAME = 'California'"
};

//At 3.x, using DefinitionQuery
var defQuery = new DefinitionQuery() {
  Name = "California",
  WhereClause = "STATE_NAME = 'California'"
};

比范のために、ITableDefinitionQueries の 2x ず 3.x の宣蚀を次に瀺したす。3.x フレヌバヌが、2x フレヌバヌのように CIMDefinitionFilter ではなく、DefinitionQuery に基づいおいるこずに泚意しおください:DefinitionQuery

//At 2.x ITableDefinitionQueries uses CIMDefinitionFilter
public class BasicFeatureLayer : Layer, ..., ITableDefinitionQueries {
   //Deprecated at 2.5. Use GetDefinitionFilters()
   public CIMDefinitionFilter[] DefinitionFilterChoices { get; }
}

//Defines required properties and methods for interacting with definition filters
public inteface ITableDefinitionQueries {
  CIMDefinitionFilter DefinitionFilter { get; }
  void SetDefinitionFilter(CIMDefinitionFilter activeFilter);
  IReadOnlyList<CIMDefinitionFilter> GetDefinitionFilters();//replaced DefinitionFilterChoices
  void SetDefinitionFilters(IEnumerable<CIMDefinitionFilter> filters, string activeFilterName = null);
  void RemoveDefinitionFilter(string filterName);
  void RemoveAllDefinitionFilters();
}

//At 3.x ITableDefinitionQueries uses DefinitionQuery
public class BasicFeatureLayer : Layer, ..., ITableDefinitionQueries {
  //DefinitionFilterChoices, deprecated at 2.5, is removed...
}

//Defines required properties and methods for interacting with definition filters
public inteface ITableDefinitionQueries {
  string DefinitionQuery { get; }
  IReadOnlyList<DefinitionQuery> DefinitionQueries { get; }
  DefinitionQuery SetDefinitionQuery(string whereClause);
  DefinitionQuery ActiveDefinitionQuery { get; } //The def query currently active
  void InsertDefinitionQuery(DefinitionQuery definitionQuery, bool makeActive = false);
  void InsertDefinitionQueries(IEnumerable<DefinitionQuery> queries);
  void RemoveActiveDefinitionQuery();
  void RemoveDefinitionQuery(int index);
  void RemoveDefinitionQueries(IEnumerable<string> queryNames);
  void RemoveAllDefinitionQueries();
}

䜿甚䟋は次のずおりです。

 var us_states = MapView.Active.Map.GetLayersAsFlattenedList()
                     .OfType<FeatureLayer>().First(lyr => lyr.Name == "US States");

 QueuedTask.Run(() => {
    us_states.SetDefinitionQuery("STATE_NAME = 'Iowa'");
    //equivalent to...
    var def_query = new DefinitionQuery() {
      Name = "A Name that is Unique",
      WhereClause = "STATE_NAME = 'Iowa'"
   };
   us_states.InsertDefinitionQuery(def_query, true);

   var active_def_query = us_states.ActiveDefinitionQuery;
   string where_clause = us_states.DefinitionQuery;//just the where clause string
   
  //remove the active query
  us_states.RemoveActiveDefinitionQuery();

  //remove using name
  us_states.RemoveDefinitionQueries(new List<string> { def_query.Name });

  //use LINQ to get just a specific query
  var def_query = us_states.DefinitionQueries.FirstOrDefault(
                                         dq => dq.Name == "Query def name");
  ...

なお、3.0 では、レむダヌのフィルタヌ定矩が CIMDefinitionFilter から DefinitionQuery に倉曎したこずに䌎い、FeatureLayerCreationParams DefinitionFilter プロパティは DefinitionQuery に倉曎されおいたす。

//At 2.x, DefinitionFilter was used with FeatureLayerCreationParams to define
//a definition filter upfront
public class FeatureLayerCreationParams : LayerCreationParams {
  ...
  public CIMDefinitionFilter DefinitionFilter { get; set; }

//At 3.x, use DefinitionQuery with FeatureLayerCreationParams instead
public class FeatureLayerCreationParams : LayerCreationParams {
  ...
  public DefinitionQuery DefinitionQuery { get; set; }

//define a definition query on the feat layer params
var featlayerParams = new FeatureLayerCreationParams() {
      DefinitionQuery = new DefinitionQuery("Name = 'Ponderosa Pine'", "My query1"),
      ...

3.x では、VoxelLayer が倉曎されたした。3.x では、ボクセル レむダヌの API は、VoxelLayer.GetVolumes メ゜ッドおよび voxelLayer.SelectedVariableProfile.Volume プロパティを介しおボクセル レむダヌの multiple ボリュヌムずの盞互䜜甚をサポヌトしおいたす。スラむスずセクションは、3.0 で関連付けられたボリュヌムにアクセスできるようになりたした (2.x の堎合のようにボクセル レむダヌからではありたせん)。次の䟋は、ボクセル レむダヌ API の倉曎をたずめたものです。

//At 2.x this was the common pattern - most everything off the layer
var voxelLayer = ...
var vol_size = voxelLayer.GetVolumeSize();
var section = voxelLayer.GetSections().First();
var slice = voxelLayer.GetSlices().First();
... etc...
//At 3.x, most everything is off the volume - so this is the most common pattern:
var voxelLayer = ...
var volume = voxelLayer.SelectedVariableProfile.Volume;
var vol_size = volume.GetVolumeSize();
var section = volume.GetSections().First();
var slice = volume.GetSlices().First();
... etc...

その他の䟋:

 //At 2.x
 var volume = voxelLayer.GetVolumeSize();
 var x_max = volume.Item1;
 var y_max = volume.Item2;
 var z_max = volume.Item3;

 //At 3.x, there can be more than one volume - use GetVolumes()
 var x_max = voxelLayer.GetVolumes().Max(v => v.GetVolumeSize().X);
 var y_max = voxelLayer.GetVolumes().Max(v => v.GetVolumeSize().Y);
 var z_max = voxelLayer.GetVolumes().Max(v => v.GetVolumeSize().Z);

 //At 2.x
 //use voxelLayer to get slices, create slices
 var slices = voxelLayer.GetSlices();
 ...
 voxelLayer.UpdateSlice(slice);//Update slice via its layer

 //Create a slice on the voxel layer
 voxelLayer.CreateSlice(new SliceDefinition() {
     Name = "Middle Slice",
     VoxelPosition = new Coordinate3D(volume.Item1 / 2, volume.Item2 / 2, volume.Item3 / 2),
     ...

 //Create a section on the voxel layer
 voxelLayer.CreateSection(new SectionDefinition() {
      Name = $"Diagonal {s + 1}",
      VoxelPosition = new Coordinate3D(end_pt.X, end_pt.Y, volumeSize.Item3),
      ....

 //Access sections from the voxel layer
 foreach (var section in voxelLayer.GetSections()) {
    //set each normal to 45.0 orientation and tilt
    section.Normal = voxelLayer.GetNormal(45.0, 45.0);
    //apply the change via the voxel layer
    voxelLayer.UpdateSection(section);

 //Get a list of sections from the voxel layer that are 
 //not currently visible 
 var sections = voxelLayer.GetSections().Where(s => !s.IsVisible);

				
 //At 3.x, 
 //Use the SelectedVariableProfile to get the slices currently in the TOC
 //via its associated volume
 var volume = voxelLayer.SelectedVariableProfile.Volume;
 var slices = volume.GetSlices();
 ...
 volume.UpdateSlice(slice);//Update slice via its volume

 //Create a slice on the voxel -volume-
 var volume = voxelLayer.SelectedVariableProfile.Volume;
 var vol_size = volume.GetVolumeSize();

 volume.CreateSlice(new SliceDefinition() {
    Name = "Middle Slice",
    VoxelPosition = new Coordinate3D(vol_size.X / 2, vol_size.Y / 2, vol_size.Z/ 2),
    ...

 //Create a section on the voxel -volume-
 volume.CreateSection(new SectionDefinition() {
      Name = $"Diagonal {s + 1}",
      VoxelPosition = new Coordinate3D(end_pt.X, end_pt.Y, volumeSize.Z),
      ....

 //Access sections from the voxel -volume-
 foreach (var section in volume.GetSections()) {
    //set each normal to 45.0 orientation and tilt
    section.Normal = voxelLayer.GetNormal(45.0, 45.0);
    //apply the change via the voxel layer
    volume.UpdateSection(section);

 //Get a list of sections from the voxel -volume- that are 
 //not currently visible 
 var sections = volume.GetSections().Where(s => !s.IsVisible);

3.x では、variable.GetVariableStatistics() メ゜ッドが削陀されたした。代わりに VoxelVariableProfile.Statistics プロパティを䜿甚しお、ボクセル倉数のプロファむル統蚈にアクセスしたす。

 //At 2.x
 var variable = voxel.SelectedVariableProfile;
 var min = variable.GetVariableStatistics().MinimumValue;
 var max = variable.GetVariableStatistics().MaximumValue;

 //At 3.x
 var variable = voxel.SelectedVariableProfile;
 var min = variable.Statistics.MinimumValue;
 var max = variable.Statistics.MaximumValue;

3.x では、ArcGIS.Desktop.Mapping.Events.MapMemberPropertiesChangedEvent、args.EventHints プロパティ、ヒント MapMemberEventHint.VoxelSelectedVariableProfileIndex が MapMemberEventHint.VoxelSelectedVariable に倉曎されたした。

//At 2.x
  MapMemberPropertiesChangedEvent.Subscribe((args) => {
     var voxel = args.MapMembers.OfType<VoxelLayer>().FirstOrDefault();
     if (voxel == null)
       return;
  //Anything changed on a voxel layer?
  if (args.EventHints.Any(hint => hint == 
         MapMemberEventHint.VoxelSelectedVariableProfileIndex)) {
    ...

//At 3.x
  MapMemberPropertiesChangedEvent.Subscribe((args) => {
     var voxel = args.MapMembers.OfType<VoxelLayer>().FirstOrDefault();
     if (voxel == null)
       return;
  //Anything changed on a voxel layer?
  if (args.EventHints.Any(hint => hint == 
         MapMemberEventHint.VoxelSelectedVariable)) {
   ...

3.x では、ElevationSurface ず ElevationSource が削陀され、シヌンから CIMMapElevationSurface むンスタンスずしお暙高サヌフェヌスを取埗するこずができなくなりたした。3.x では、暙高サヌフェスず゜ヌスはそれぞれ ElevationSurfaceLayer ず (ラスタヌ、TIN などの) 汎甚レむダヌで衚珟されたす。ElevationSurfaceLayer は CompositeLayer から掟生し、1 ぀以䞊の子暙高゜ヌス レむダヌを含むこずができたす。

3.x では、MapElevationSurfaceDefinition クラスが削陀されたした。[ElevationLayerCreationParams](https://pro. arcgis.com/en/pro-app/latest/sdk/api-reference/topic76633.html) クラスのむンスタンスを代わりに䜿甚したす。

 //At 2.x - 
 //If you used....
 var cimSurfaces = map.GetElevationSurfaces() ; //IReadOnlyList<CIMMapElevationSurface> 
 var cimSurface = map.GetGroundElevationSurface() ; //CIMMapElevationSurface

 map.SetElevationSurace(cimSurface);//or mapElevationSurfaceDefinition.ToCIM()
 map.SetElevationSuraces(cimSurfacesList);

 map.RemoveElevationSurface(cimSurface);
 map.ClearElevationSurfaces();
 
 //At 3.x use ElevationSurfaceLayer
 var surfaceLayers = map.GetElevationSurfaceLayers();

 var surfaceLayer = map.GetGroundElevationSurfaceLayer();

 //At 3.x Create surfaces using LayerFactory and ElevationLayerCreationParams
 //Surfaces will be created as ElevationMode.CustomSurface
 LayerFactory.Instance.CreateLayer<ElevationSurfaceLayer>(
       new ElevationLayerCreationParams(source_uri), scene);

 //Or create a new scene from scratch with a ground elevation source
 var scene = MapFactory.Instance.CreateScene(
                "My scene", groundSourceUri, MapViewingMode.SceneGlobal);

 //At 3.x, use map.RemoveLayer(s)(...) or ClearElevationSurfaceLayers
 map.RemoveLayer(surfaceLayer);//Cannot remove ground
 map.RemoveLayers(map.GetElevationSurfaceLayers()); //Ground will not be removed

 map.ClearElevationSurfaceLayers();

3.0 では、map.GetZsFromSurfaceAsync のオヌバヌロヌドが倉曎されたした。2.x では、特定のオヌバヌロヌドが暙高ク゚リに䜿甚されるサヌフェス (地面以倖の堎合) の surfaceName を消費しおいたした。3.0 では、関連するオヌバヌロヌドに察しお、代わりに関連するサヌフェスを識別する特定の elevationSurfaceLayer むンスタンスを䜿甚したす。

//At 2.x - if using elevation surface -name-...
var surfaceZResult = await map.GetZsFromSurfaceAsync(
                             pt_location, "custom_elevation_surface");

//At 3.x - use elevation surface -layer-
var elevSurfaceLayer = map.GetElevationSurfaceLayers()
                             .First(sl => sl.Name == "custom_elevation_surface");
var surfaceZResult = await map.GetZsFromSurfaceAsync(pt_location, elevSurfaceLayer);

3.x では、ISceneLayerInfo むンタヌフェヌスが削陀されたした。これたで ISceneLayerInfo.SceneServiceLayerType プロパティを䜿甚しおいたアドむンは、レむダヌのクラス タむプ および/たたは (FeatureSceneLayer の堎合 FeatureSceneLayerType を䜿甚する必芁がありたす) たた、3.x では GetDataSourceType() ず GetDataConnection() はレむダヌから盎接アクセスできるようになりたした。

3.x では、PointCloudSceneLayer QueryAvailableClassCodesAndLabels, QueryAvailableClassFlagsAndLabels, QueryAvailablePointCloudRendererFields メ゜ッドはそれぞれ GetAvailableClassCodesAndLabels, GetAvailableClassFlagsAndLabels, GetAvailablePointCloudRendererFields ぞ名前が倉曎になりたした。

3.x では、BuildingScenelayer QueryAvailableFieldsAndValues は GetAvailableFieldsAndValues に名前が倉曎されたした。SetFilter メ゜ッドは UpdateFilter に名前が倉曎されたした。

  //At 2.x - using ISceneLayerInfo, eg on PointCloudSceneLayer
  var slInfo = pointCloudLayer as ISceneLayerInfo;
  if (slInfo.SceneServiceLayerType == SceneServiceLayerType.PointCloud) {
    //TODO - access Point cloud scene layer...

  var dataSourceType = slInfo.GetDataSourceType();
  var dc = slInfo.GetDataConnection();

 //At 2.x 
 var classCodesAndLabels = pcsl.QueryAvailableClassCodesAndLabels();
 var classFlagsAndLabels = pcsl.QueryAvailableClassFlagsAndLabels();
 var flds = pcsl.QueryAvailablePointCloudRendererFields(PointCloudRendererType.UniqueValueRenderer);

 //At 2.x BuildingScenelayer
 var classFieldsAndValues = bsl.QueryAvailableFieldsAndValues();

 var filterBlock = new FilterBlockDefinition();
 filterBlock.FilterBlockMode = Object3DRenderingMode.Wireframe;
 var selValues = new Dictionary<string, List<string>>();
 selValues ["Category"] = new List<string>() { ... };
 filterBlock.SelectedValues =  selValues;
 ...
 var filter1 = bsl.GetFilter(filter_id);
 filter1.Name = "Updated Filter";
 filter1.FilterBlockDefinitions = new List<FilterBlockDefinition>() { filterBlock };
 //At 2.x
 bsl.SetFilter(filter1);
 
 //At 3.x - ISceneLayerInfo is deleted. Use the layer class directly.
  var slInfo = pointCloudLayer as ISceneLayerInfo;
  if (sceneLayer is PointCloudSceneLayer pcsl) {
    //TODO - access Point cloud scene layer...

  var dataSourceType = pcsl.GetDataSourceType();//Off layer
  var dc = pcsl.GetDataConnection();//Off layer

 //At 3.x
 var classCodesAndLabels = pcsl.GetAvailableClassCodesAndLabels();
 var classFlagsAndLabels = pcsl.GetAvailableClassFlagsAndLabels();
 var flds = pcsl.GetAvailablePointCloudRendererFields(PointCloudRendererType.UniqueValueRenderer);

 //At 3.x BuildingScenelayer
 var classFieldsAndValues = bsl.GetAvailableFieldsAndValues();

 var filterBlock = new FilterBlockDefinition();
 filterBlock.FilterBlockMode = Object3DRenderingMode.Wireframe;
 var selValues = new Dictionary<string, List<string>>();
 selValues ["Category"] = new List<string>() { ... };
 filterBlock.SelectedValues =  selValues;
 ...
 var filter1 = bsl.GetFilter(filter_id);
 filter1.Name = "Updated Filter";
 filter1.FilterBlockDefinitions = new List<FilterBlockDefinition>() { filterBlock };
 //At 3.x
 bsl.UpdateFilter(filter1);

3.x では、カスタム アむテムで䜿甚する IMappableItem ず IMappableItemEx むンタヌフェヌスは、単䞀の IMappableItem むンタヌフェヌスに眮き換わりたした。OnAddToMap オヌバヌロヌドの戻り倀の型が List<string> に倉曎されたこずに泚意しおください。カスタム アむテムは、2.x の IMappableItem ず IMappableItemEx の実装を 3.x の IMappableItem の定矩に倉曎する必芁がありたす。3.x では、アドむンは OnAddToMap から、OnAddToMap) で (远加されたマップ メンバヌの URI のリストを返す必芁がありたす。詳现に぀いおは ProConcepts, Custom-Items adding item content to the map を参照しおください。

 //At 2.x
 interface IMappableItem
 public bool CanAddToMap(MapType? mapType)
 public void OnAddToMap(Map map)
 public void OnAddToMap(Map map, ILayerContainerEdit groupLayer, int index)
 
 interface IMappableItemEx
 public string[] OnAddToMapEx(Map map)
 public string[] OnAddToMapEx(Map map, ILayerContainerEdit groupLayer, int index)

 //At 3.x -single (consolidated) interface IMappableItem
 interface IMappableItem
 public bool CanAddToMap(MapType? mapType)//No change
 public List<string> OnAddToMap(Map map)
 public List<string> OnAddToMap(Map map, ILayerContainerEdit groupLayer, int index)

  public bool CanAddToMap(MapType? mapType) {
    ... //No change

  public List<string> OnAddToMap(Map map) {
    return OnAddToMap(map, null, -1);
  }

  public List<string> OnAddToMap(Map map, ILayerContainerEdit groupLayer, int index) {
    //Create map member content - eg layers
    var layer = LayerFactory.Instance.CreateLayer(.....);
    //return list of URIs of layers that were added (to the map or group layer)
    return new List<string>() { layer.URI };
 }

3.x では、Array 型のパラメヌタヌを䜿甚したり、Array 型ずしお定矩されおいたさたざたなクラス メ゜ッドずプロパティが、List たたは IEnumerable を䜿甚するようになりたした。さらに、Array 型を returned した特定のメ゜ッドは、List 型たたは IReadOnlyList 型を返すようになりたした。圱響を受けるコヌドを必芁に応じお倉曎したす。非同期だった (぀たり、Task の戻り倀の型を持぀) 特定のメ゜ッドには "Async" 接尟蟞がありたせんでしたが、珟圚は "Async" 接尟蟞が远加されおいたす (䟋えば、以䞋の LineOfSight クラスを参照しおください)。

3.x では、LineOfSight クラスの「Get」メ゜ッドに远加の「Async」接尟蟞が含たれるようになりたした。これらのメ゜ッドが Task の型を返すこずを正しく反映しおいたす。さらに、「Set」メ゜ッドは、2.x で型「void」を返したした。珟圚、3.x では、それらはすべお埅機可胜で、Task の型を返し、"Async" 接尟蟞が含たれおいたす。泚: GetObserver() ず SetObserver(camera) は倉曎されおいたせん。

3.x では、QueryDrawingOutline は GetDrawingOutline になりたした。

 //At 2.x, use array
 var rendererDefn1 = new UniqueValueRendererDefinition(new string[] { "field1", "field2" });
 //At 3.x, use list
 var rendererDefn1 = new UniqueValueRendererDefinition(new List<string> { "field1", "field2" });
 
 //At 2.x - various properties use Array
 var colorizerDef = new ColormapColorizerDefinition() {
     Colors = new List<CIMColor>() { ....... }.ToArray(),
     ...

 //At 3.x - corresponding properties changed to use type List
 var colorizerDef = new ColormapColorizerDefinition() {
     Colors = new List<CIMColor>() { ....... },
     ...

 //At 2.x, lineOfSight Get methods do not have 'Async' suffix
 var color = await lineOfSight.GetVisibleColor();
 var color2 = await lineOfSight.GetNotVisibleColor();
 var color3 = await lineOfSight.GetOutOfRangeColor();
 ...
 //At 3.x they do
 var color = await lineOfSight.GetVisibleColorAsync();
 var color2 = await lineOfSight.GetNotVisibleColorAsync();
 var color3 = await lineOfSight.GetOutOfRangeColorAsync();
 ...

 //At 2.x LineOfSight static "Set" methods are not awaitable
 LineOfSight.SetVisibleColor(color);
 LineOfSight.SetNotVisibleColor(color2);
 LineOfSight.SetOutOfRangeColor(color3);

 //At 3.x LineOfSight static "Set" methods are awaitable and have
 //an Async suffix
 await LineOfSight.SetVisibleColorAsync(color);//can await (optional)
 await LineOfSight.SetNotVisibleColorAsync(color2);//can await (optional)
 //not awaited...
 LineOfSight.SetOutOfRangeColorAsync(color3);//can await (optional)
 
 //At 2.x, use "Query...."
 var mask_geom = featLayer.QueryDrawingOutline(oid, mv, DrawingOutlineType.Exact);
 //At 2.x3.0, use "Get...."
 var mask_geom = featLayer.GetDrawingOutline(oid, mv, DrawingOutlineType.Exact);

3.0 では、featureLayer.SetDisplayCacheType(...) が削陀されたした。 アドむンでは、代わりに新しい featureLayer.SetCacheOptions() メ゜ッド を䜿甚する必芁がありたす。

 // change the layer cache type to maximum age
 QueuedTask.Run(() => {
   //At 2.x
   featureLayer.SetDisplayCacheType(ArcGIS.Core.CIM.DisplayCacheType.MaxAge);
   featureLayer.SetDisplayCacheMaxAge(TimeSpan.FromMinutes(2));

   //At 3.x
   featureLayer.SetCacheOptions(LayerCacheType.MaxAge);
   featureLayer.SetDisplayCacheMaxAge(TimeSpan.FromMinutes(2));  

3.x では、ArcGIS.Desktop.Mapping.Snapping スナップ モヌドが倉曎されたした。2.x の SetSnapModes(...) は、0 個以䞊の (カンマ区切りの) SnapMode パラメヌタの可倉セットを䜿甚しおいたした。3.x では、SetSnapModes はスナップ モヌドの IEnumerable を消費したす。

3.x では、特定の ArcGIS.Desktop.Mapping.SnappingOptions プロパティ が倉曎されたした。これは䞻に、䞀貫性を向䞊させるために名前を倉曎するためのものです。泚: 2.x スナップ オプション プロパティの GeometrySnapping、SnapRequestType、VisualFeedbackColor、および VisualSnapping は削陀され、サポヌトされなくなりたした。 たた、3.x では、SnapResult.OID の名前が SnapResult.ObjectID に倉曎されたした。

以䞋に䟋を瀺したす。

 // set only Point and Edge snapping modes, clear everything else
 //At 2.x
 ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(SnapMode.Point, SnapMode.Edge);
 ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(); //to clear all snap modes

 //At 3.x
 ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(new List<SnapMode>(){ SnapMode.Point, SnapMode.Edge});
 ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(null); //to clear all snap modes

 //Set snapping options via get/set options
 var snapOptions = ArcGIS.Desktop.Mapping.Snapping.GetOptions(myMap);

 //At 2.x
 snapOptions.SnapToSketchEnabled = true;
 snapOptions.ZToleranceEnabled = true;
 snapOptions.GeometricFeedbackColor = ColorFactory.Instance.RedRGB;

 //At 3.x
 snapOptions.IsSnapToSketchEnabled = true;
 snapOptions.IsZToleranceEnabled = true;
 snapOptions.SnapTipColor = ColorFactory.Instance.RedRGB;

 ArcGIS.Desktop.Mapping.Snapping.SetOptions(snapOptions);

//At 2.x - 
//snapOptions.GeometricSnapping,  snapOptions.SnapRequestType,  snapOptions.VisualFeedbackColor, 
//snapOptions.VisualSnapping are removed at 3.x
      

2.x では、MapView の MapView.GetFeatures、MapView.GetFeaturesEx、MapView.SelectFeatures /latest/sdk/api-reference/topic11992.html)、MapView.SelectFeaturesEx メ゜ッドは、それぞれ Dictionary<BasicFeatureLayer, List<long>> および Dictionary<Layer, List<long>> 型の汎甚 LINQ コレクションずしお返されたした。2.x のパブリック API のさたざたなメ゜ッドが、返された遞択セットの Dictionary を消費したした。- 䟋えば MapView.ZoomTo(IReadOnlyDictionary<BasicFeatureLayer,List<long>>,...) や、倚くの EditOperation のマクロ、䟋えば EditOperation.Move(IEnumerable<KeyValuePair<MapMember,List<long>>,...)、EditOperation.Reshape(IEnumerable<KeyValuePair<MapMember,List<long>>,...) 、EditOperation.Rotate(IEnumerable<KeyValuePair<MapMember,List<long>>,...>) などがありたす。(詳现は ArcGIS.Desktop.Editing.dll の倉曎点を参照しおください(&#41)。

3.0 では、返される LINQ コレクションが SelectionSet クラス に倉曎されたした。2.x の遞択セットを Dictionary ずしお消費しおいたパブリック API の察応するメ゜ッドは、珟圚、新しい SelectionSet クラスを消費しおいたす。2.x で LINQ を䜿っお返された遞択セット Dictionary をフィルタリングしおいたアドむンのために、SelectionSet クラスは ToDictionary 倉換メ゜ッドを提䟛したす。ToDictionary() は SelectionSet を LINQ Dictionary コレクションに倉換し、2.x ず同じように LINQ で操䜜できるようにしたす。

 //At 2.x -
 QueuedTask.Run(()=> {
    var sel_poly = .... ;//Polygon to use for selection

    //zoom to the extent of the retrieved set of features
    MapView.Active.ZoomTo(MapView.Active.GetFeatures(sel_poly));

    //move the selected set of features
    var editOp = new EditOperation() { ..... };
    editOp.Move(MapView.Active.SelectFeatures(sel_poly), 500.0, 500.0);
    editOp.Execute();

    //rotate
    var editOp = new EditOperation() { ..... };
    editOp.Rotate(MapView.Active.SelectFeatures(sel_poly), origin, 35.0);
    editOp.Execute();
   
    //get the geometry of the first selected feature.
    var dict_sel = MapView.Active.GetFeatures(sel_poly);
    var insp = new Inspector();
    insp.Load(dict_sel.Keys.First(), dict_sel.Values.First());
    var selGeom = insp.Shape;

    //Get the list of object ids from SelectFeaturesEx for a particular layer using LINQ
    var sname = "Points of Interest";
    var dict_sel = MapView.Active.SelectFeaturesEx(env);
    var oids1 = dict_sel.Where(kvp => kvp.Key.Name == sname).First().Value;
    //TODO - use the object ids
 });

 //At 3.x
 QueuedTask.Run(() => {
     var sel_poly = .... ;//Polygon to use for selection

    //zoom to the extent of the retrieved set of features - No change
    MapView.Active.ZoomTo(MapView.Active.GetFeatures(sel_poly));

    //move the selected set of features - No change
    var editOp = new EditOperation() { ..... };
    editOp.Move(MapView.Active.SelectFeatures(sel_poly), 500.0, 500.0);
    editOp.Execute();

    //rotate - no change
    var editOp = new EditOperation() { ..... };
    editOp.Rotate(MapView.Active.SelectFeatures(sel_poly), origin, 35.0);
    editOp.Execute();
   
    //get the geometry of the first selected feature. Use ToDictionary()
    //to apply LINQ
    var selSet = MapView.Active.GetFeatures(sel_poly);
    var insp = new Inspector();
    insp.Load(selSet.ToDictionary().Keys.First(), selSet.ToDictionary().Values.First());
    var selGeom = insp.Shape;

    //Get the list of object ids from SelectFeaturesEx for a particular layer. Use ToDictionary()
    //to apply LINQ
    var sname = "Points of Interest";
    var selSet = MapView.Active.SelectFeaturesEx(env);
    var oids1 = selSet.ToDictionary().Where(kvp => kvp.Key.Name == sname).First().Value;
    //TODO - use the object ids

    //Create a selection set from a list of object ids
    //using FromDictionary
    var addToSelection = new Dictionary<MapMember, List<long>>(); 
    addToSelection.Add(us_zips, new List<long> { 1506, 2696, 2246, 1647, 948 }); 
    var sset = SelectionSet.FromDictionary(addToSelection); 
    //TODO - use sset
    //etc
 });

3.x では、MapView の SelectElements メ゜ッドが、IElementContainer の SelectElements 定矩に䞀臎するように倉曎されたした。 これは 2.x のような IReadOnlyList<Element> ではなく void を返したす。mapView.SelectElements(...) を実行しお遞択した芁玠を取埗するには、䜿甚しおいる/䜿甚しおいた SelectElements のオヌバヌロヌドに応じお、指定されたグラフィックス レむダヌたたは TOC 内のすべおの GraphicsLayers をク゚リしたす。

//At 2.x
//Either - select from all graphics layers
var sel_elems = MapView.Active.SelectElements(
   sel_geom, SelectionCombinationMethod.New, false);
// Or - select just from the specified graphics layer
var gl = mapView.Map.GetLayersAsFlattenedList().OfType<GraphicsLayer>().First();
var sel_elems = MapView.Active.SelectElements(
   gl, sel_geom, SelectionCombinationMethod.New, false);

//At 3.x
MapView.Active.SelectElements(
   sel_geom, SelectionCombinationMethod.New, false);//returns void
//or
var graphicsLayer = mapView.Map.GetLayersAsFlattenedList().OfType<GraphicsLayer>().First();
MapView.Active.SelectElements(
   graphicsLayer, sel_geom, SelectionCombinationMethod.New, false);//returns void

//Get the selected elements
// - if a specific GraphicsLayer was specified then use it
var sel_elems = graphicsLayer.GetSelectedElements();

//No GraphicsLayer was specified, collect selection from all GraphicsLayers
var graphicsLayers = mapView.Map.GetLayersAsFlattenedList().OfType<GraphicsLayer>() ??
				new List<GraphicsLayer>();

var sel_elems = new List<Element>();
foreach (var graphicsLayer in graphicsLayers) {
  sel_elems.AddRange(graphicsLayer.GetSelectedElements());
}

//can also use map.TargetGraphicsLayer
var map = MapView.Active.Map;
var sel_elems = map.TargetGraphicsLayer.GetSelectedElements();

3.x では、ArcGIS.Desktop.Mapping.ExploratoryAnalysis ず察話する MapView メ゜ッドに「Async」 接尟蟞が付きたした。mapView.RemoveExploratoryAnalysis() ず mapView.AddExploratoryAnalysis() は、それぞれ mapView.RemoveExploratoryAnalysisAsync() ず mapView.AddExploratoryAnalysisAsync() になりたした。

3.x では、CIMGenericView で䜿甚される XML 氞続性モデルに倉曎があり、TOCMapPaneProviderPane から掟生したカスタム マップ ペむン ビュヌ モデルを䜿甚したマップ ペむン停装の実装がありたす, topic 16597。カスタム マップ ペむンず停装マップ ペむンは、topic 1481 の CIMGenericView ずしお氞続化されたす。.aprx に関連する倉曎に぀いおは、このドキュメントの カスタム CIMGenericView ず ViewXML セクションを参照しおください。

3.0 の API の倉曎の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.TaskAssistant.dll

3.x では、TaskAssistantModule は 内郚 になりたした。2.x で TaskAssistantModule からアクセスしおいたメ゜ッドは、3.x で新しい TaskAssistantFactory クラスからアクセスする必芁がありたす。

䟋は次のずおりです。

 //At 2.x
 //Access to tasks and task items via TaskAssistantModule
 var taskItem = Project.Current.GetItems<TaskProjectItem>().FirstOrDefault();
 //open a project task item
 await TaskAssistantModule.OpenTaskItemAsync(taskItem.TaskItemGuid);

 //Get task item information
 string taskFile = @"c:\Tasks\Get Started.esriTasks";
 var taskItemInfo = await TaskAssistantModule.GetTaskItemInfoAsync(taskFile);

 // find the first task in the task item
 var taskInfo = taskItemInfo.GetTasks().FirstOrDefault();
 //open the task
 await TaskAssistantModule.OpenTaskAsync(taskFile, taskInfo.Guid);

 //export
 await TaskAssistantModule.ExportTaskAsync(taskItem.TaskItemGuid, @"c:\temp");//also ImportTaskAsync
 ...
 //Close it and remove from project
 TaskAssistantModule.CloseTaskAsync(taskItem.TaskItemGuid);


 //At 3.x
 //use TaskAssistantFactory
 var taskItem = Project.Current.GetItems<TaskProjectItem>().FirstOrDefault();
 //open a project task item
 await TaskAssistantFactory.Instance.OpenTaskItemAsync(taskItem.TaskItemGuid);

 //Get task item information
 string taskFile = @"c:\Tasks\Get Started.esriTasks";
 var taskItemInfo = await TaskAssistantFactory.Instance.GetTaskItemInfoAsync(taskFile);

 // find the first task in the task item
 var taskInfo = taskItemInfo.GetTasks().FirstOrDefault();
 //open the task - notice -OpenTaskFileAsync-
 await TaskAssistantFactory.Instance.OpenTaskFileAsync(taskFile, taskInfo.Guid);

 //export - ExportTaskItemAsync
 await TaskAssistantFactory.Instance.ExportTaskItemAsync(taskItem.TaskItemGuid, @"c:\temp");
 //also ImportTaskFileAsync ...
 ...
 //Close it and remove from project - notice -CloseTaskItemAsync
 TaskAssistantFactory.Instance.CloseTaskItemAsync(taskItem.TaskItemGuid);

3.0 の API の倉曎の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

ArcGIS.Desktop.Workflow.dll

3.0 の API の倉曎の完党なリストに぀いおは、API リファレンスの What's New を参照しおください。

CIM の氞続性

3.x では、CIM オブゞェクトの xml シリアラむズ メ゜ッドは 削陀されたした。cimObject.ToXml() ず CIMObject.FromXml() メ゜ッドのペアを介しお XML シリアラむれヌションずデシリアラむれヌションを䜿甚する 2.x のアドむンは、3.x で JSON を䜿甚するように切り替える必芁がありたす。CIM 氞続性モデルの json ぞの切り替えにより、よりコンパクトなシリアル化圢匏が提䟛され、Pro の .aprx のサむズが瞮小され、シリアラむズ/デシリアラむズのパフォヌマンスに関しおは xml よりも高速になりたす。

3.x で CIM オブゞェクトを氞続化 (たたはシリアラむズ) するには、開発者は関連する掟生 CIM クラスに぀いおオヌバヌラむドされた cimObject.ToJson() むンスタンスのメ゜ッド topic 24486 を䜿甚する必芁がありたす。CIM json をデシリアラむズするには、アドむンは静的な CIMObject.FromJson(json_string) 掟生クラスのメ゜ッド topic 74865(関連する CIM クラスで) を䜿甚する必芁がありたす。

以䞋は、json を䜿甚した 3.x での CIM 氞続性の䟋です。

 //assume we have a feature layer ....
 var map = MapView.Active.Map;
 var fl = map.GetLayersAsFlattenedList().OfType<FeatureLayer>().First();
			
 QueuedTask.Run(() => {
    //get a cim definition to be serialized - eg the renderer definition
    var simple_renderer = fl.GetRenderer() as CIMSimpleRenderer;

    //To persist serialized state at 3.x, use json
    var renderer_json = original_object.ToJson();//No ToXml() at 3.x
    
    //deserialize json to get back to original object
    var simple_renderer2 = CIMSimpleRenderer.FromJson(renderer_json);//No FromXml() at 3.x

     //Apply to the layer
    fl.SetRenderer(original_object2);
    ...

3.x での xml ずの間の Geometry むンスタンスのシリアラむれヌションは匕き続きサポヌトされおいたす。

2.x 以前で保持されおいた CIM Xml の倉換

ファむル、カスタム デヌタベヌス、たたは他のストレヌゞに保存された、2.x でシリアラむズされた氞続化 xml の CIM 文字列を䜿甚するアドむンは、topic 75062 の ArcGIS.Core.CIM.XmlUtils.UpgradeAndDeserializeCIMObject(xml) メ゜ッドを䜿甚しお、氞続化された 2.x の CIM オブゞェクトを 3.x 準拠のオブゞェクトに䞀方的に転換するこずが掚奚されおいたす。UpgradeAndDeserializeCIMObject は、必芁な xml からのデシリアラむれヌションず、必芁なアップグレヌド倉換の䞡方を行い、CIM オブゞェクトを適切な 3.x バヌゞョンにアップグレヌドしたす。

泚: 埌方互換性はありたせん。぀たり、3.0 の CIM オブゞェクトに倉換された 2.x の CIM xml は、元の 2.x 圢匏にバックポヌトできたせん。デシリアラむれヌションず 3.0 ぞのアップグレヌドは䞀方向です。

次の䟋は、UpgradeAndDeserializeCIMObject を䜿甚しお 2.x の CIM xml をデシリアラむズおよびアップグレヌドする方法を瀺しおいたす。

using ArcGIS.Core.CIM;
...

 //assume we have a feature layer ....
 var map = MapView.Active.Map;
 var fl = map.GetLayersAsFlattenedList().OfType<FeatureLayer>().First();
			
 QueuedTask.Run(() => {
    //2.x CIM xml retrieved from a file, proprietary database, etc.
    var simple_renderer_xml = ... ;
    
    //use XmlUtils.UpgradeAndDeserializeCIMObject(xml) to hydrate the CIM object 
    //at 3.x from 2.x xml - it will do a one-way conversion and upgrade to a 3.x CIMObject
    //No CIMObject.FromXml() at 3.x
    var simple_renderer = (CIMSimpleRenderer)XmlUtils.UpgradeAndDeserializeCIMObject(simple_renderer_xml);

    //Apply to the layer
    fl.SetRenderer(simple_renderer);

    //TODO - change renderer properties, etc. 
    ...
    //persist renderer in json to save back in proprietary database, file on disk, etc.
    var renderer_json = fl.GetRenderer().ToJson();
    //From this point on, addin uses json for CIM persistence workflows

カスタム CIMGenericView ず ViewXML

3.x では、view.ViewXML 文字列プロパティは削陀されたした。2.x では、アドむンはカスタム ビュヌの状態を view.ViewXML プロパティ (および view.ViewProperties ディクショナリ) に保存するこずができたした。カスタム ビュヌは、3.x でカスタム コンテンツを保持するために、CIMGenericView の view.ViewProperties dictionary を䜿甚するように倉曎する必芁がありたす。ViewProperties ディクショナリに曞き蟌たれたカスタム コンテンツは、プロゞェクトが保存されるたびに、aprxに氞続化されたす。氞続化は、ビュヌのモデル (すべおのカスタム ビュヌ モデルは ArcGIS.Desktop.Core.ViewStatePane ベヌス クラスから掟生したす) のオヌバヌラむドされた public override CIMView ViewState プロパティ, topic 9234 ぞのコヌルバックを通じお実装されたす。泚意: デフォルトでは、view.ViewPropertiesは null です。䜿甚する前に、必芁に応じおむンスタンス化しおください。

䟋は次のずおりです。

カスタム ビュヌで、すべおの view.ViewXML を CIMGenericView view.ViewProperties[...] (適切なキヌを䜿甚) に倉曎したす。

 //At 2.x
 view.ViewXML = new XDocument(new XElement("Root",
               new XElement("custom", "custom value"))).ToString(
                                                    SaveOptions.DisableFormatting);

 //At 3.x
 //Use CIMGenericView ViewProperties Dictionary
 if (view.ViewProperties == null)
   view.ViewProperties = new Dictionary<string, object>();
 view.ViewProperties["My_Custom_Content"] = "Custom content -xml or otherwise";

この䟋では、カスタム ビュヌは (内郚の) 静的な "factory" Create メ゜ッドで view.ViewXML を䜿甚しおいたしたが、珟圚は view.ViewProperties ディクショナリに眮き換えられおいたす。

 internal class CustomPaneViewModel : ViewStatePane, IContentsProvider, IContentsControl {
   private const string _viewPaneID = "....";
   ...
   public CustomPaneViewModel(CIMView view) : base(view) {
     ...
   /// <summary>
   /// Create a new instance of the pane.
   /// </summary>
   internal static CustomPaneViewModel Create() {
      var view = new CIMGenericView();
      view.ViewType = _viewPaneID;
      //At 2.x
      // view.ViewXML = 
      //   "<Root><LastChanged>" + DateTime.Now.ToString("HH:mm:ss tt") + "</LastChanged></Root>";

      //At 3.x, Use ViewProperties
      view.ViewProperties = new Dictionary<string, object>();
      view.ViewProperties["LastChanged"] = DateTime.Now.ToString("HH:mm:ss tt");

      return FrameworkApplication.Panes.Create(
          _viewPaneID, new object[] { view }) as CustomPaneViewModel;
  }
  ...

 /// <summary>
 /// Button implementation to create a new instance of the pane and activate it.
 /// </summary>
 internal class CustomPane_OpenButton : Button {
   protected override void OnClick() {
     CustomPaneViewModel.Create();
   }
 }

この䟋では、カスタム ビュヌは ViewState プロパティのコヌルバック (プロゞェクトの保存時にアクセス) で ViewProperties を䜿甚するように切り替えられおいたす。view.ViewProperties に曞き蟌たれたコンテンツは aprx に保存されたす:

internal class AcmeCustomMapPaneViewModel : TOCMapPaneProviderPane {
  private const string _viewPaneID = "....";
  private string _customValue = "....";
  ...

  /// <summary>
  /// Must be overridden in child classes used to persist the state of the view to the CIM.
  /// </summary>
  public override CIMView ViewState {
      get {
        //If we are here, the project is being saved
        _cimView.InstanceID = (int)InstanceID;
       //At 2.x
       // _cimView.ViewXML = 
       //   "<Root><LastChanged>" + DateTime.Now.ToString("HH:mm:ss tt") + "</LastChanged></Root>";

       //At 3.x, Use ViewProperties
       if (((CIMGenericView)_cimView).ViewProperties == null)
          ((CIMGenericView)_cimView).ViewProperties = new Dictionary<string, object>();

       ((CIMGenericView)_cimView).ViewProperties["LastChanged"] = DateTime.Now.ToString("HH:mm:ss tt");

       //Store anything else that the custom view requires
       //Note: this code works at 2.x as well
       ((CIMGenericView)_cimView).ViewProperties["foo"] = "bar";
       ((CIMGenericView)_cimView).ViewProperties["custom"] = _customValue;
       //can also include serialized content
       ((CIMGenericView)_cimView).ViewProperties["self"] = _cimView.ToJson();
       //etc
       return _cimView;
    }

2.x プロゞェクトが view.ViewXML でカスタム ビュヌ ステヌト 以前に氞続化された で開かれおいる堎合、予玄枈みのキヌ「ViewXML」を䜿甚しお view.ViewProperties ディクショナリから取埗できたす (カスタム ビュヌ アドむンは 3.x に移行されたした)。泚: 3.x に移行された 2.x のカスタム ビュヌは、既に (view.ViewXML ではなく) view.ViewProperties ディクショナリを䜿甚しおいたしたが、倉曎を行う必芁はありたせん (移行に必芁なその他の倉曎以倖)。

この䟋は、2.x で view.ViewXML を䜿甚し、3.x で view.ViewProperties["ViewXML"] の䜿甚に切り替えるカスタム ビュヌの「前埌」の実装を瀺しおいたす。カスタム ビュヌの 3.x バヌゞョンが、view.ViewProperties["ViewXML"] の存圚をチェックする方法に泚目しおください。

2.x の aprx を 3.x で開いたずきに、以前に view.ViewXML プロパティで保持した (あなたのビュヌの) カスタム ビュヌ コンテンツが含たれおいるず、view.ViewProperties["ViewXML"] 倀がビュヌ プロパティのディクショナリに远加されるこずを芚えおいおください。

//At 3.x. view.ViewXML has been removed. Use view.ViewProperties for persistence
internal class AcmeCustomMapPaneViewModel : TOCMapPaneProviderPane {
  private const string _viewPaneID = "....";
  private string _lastChangeToProperties = "";
  private string _customContent = "";
  private string _bar = "";
  /// <summary>
  /// Must be overridden in child classes used to persist the state of the view to the CIM.
  /// </summary>
  public override CIMView ViewState {
      get {
        //If we are here, the project is being saved
        _cimView.InstanceID = (int)InstanceID;

         //At 3.x - use view.ViewProperties. There is no ViewXML
        _lastChangeToProperties = DateTime.Now.ToString("HH:mm:ss tt");

        if (((CIMGenericView)_cimView).ViewProperties == null)
          ((CIMGenericView)_cimView).ViewProperties = new Dictionary<string, object>();

        ((CIMGenericView)_cimView).ViewProperties["LastChanged"] = 
                                      _lastChangeToProperties ;
        ((CIMGenericView)_cimView).ViewProperties["foo"] = _bar;
        ((CIMGenericView)_cimView).ViewProperties["custom"] = _customValue;
        //can also include serialized content
        ((CIMGenericView)_cimView).ViewProperties["self"] = _cimView.ToJson();
        //etc
        return _cimView;
      }
    }
 
 //read in any of our previously persisted state/content
 protected async override Task InitializeAsync() {
   if (((CIMGenericView)_cimView).ViewProperties == null)
        return;

   var uri = ((CIMGenericView)_cimView).ViewProperties["MAPURI"] as string;

   //use ViewProperties same as in 2.x
   if (((CIMGenericView)_cimView).ViewProperties.ContainsKey("LastChanged"))
     _lastSave = ((CIMGenericView)_cimView).ViewProperties["LastChanged"] as string;

   if (((CIMGenericView)_cimView).ViewProperties.ContainsKey("foo"))
     _bar = ((CIMGenericView)_cimView).ViewProperties["foo"] as string;

   if (((CIMGenericView)_cimView).ViewProperties.ContainsKey("custom"))
     ... etc, etc,...

   //Now check if this a 2.x project being opened in 3.0 that had previously used view.ViewXML.... 
   //If so, at 3.x, it will have a "special" "ViewXML" key that will have been added to the
   //ViewProperties containing the legacy content...
   //...
   if (((CIMGenericView)_cimView).ViewProperties.ContainsKey("ViewXML")) { //Legacy content
       var previous_custom_content = ((CIMGenericView)_cimView).ViewProperties["ViewXML"] as string;
       //TODO Process the custom content that was persisted at 2.x
       
       string customContentFromViewXML = .... ;
       //Ok to delete "ViewXML" once its been read (but not required)
       ((CIMGenericView)_cimView).ViewProperties.Remove("ViewXML");
    }

ViewProperties["ViewXML"] から 2.x コンテンツが読み取られるず、必芁に応じおキヌを安党に削陀できたす。

マップ、レむアりト、およびレむダヌ ファむルずパッケヌゞ

2.x で䜜成されたマップ、レむアりト、レむダヌ (.mapx、.pagx、.lyrx) およびパッケヌゞ (.mpkx、.lpkx) は、3.0 のパブリック API で 倉曎なし で䜿甚できたす。API によっお消費されるず、自動的に 3.0 圢匏に倉換されたす。

䟋えば

 //At 3.x, consume 2.x files and packages in the public API
 QueuedTask.Run(()=> {
    //Create a map using a 2.x map file or package
    var mapx_path = @"E:\Data\SDK\Migration\Crimes_Map_29.mapx";//or package
    MapFactory.Instance.CreateMap(new Uri(mapx_path));

    //Create a layout using a 2.x layout file
    var lytx_path = @"E:\Data\SDK\Migration\Crimes_Layout_29.pagx";
    var lytx_item = ItemFactory.Instance.Create(lytx_path) as IProjectMultiItem;
    Project.Current.ImportItem(lytx_item, false, true);
 });

この䟋では、アドむンは 2.x のレむダヌ ファむル、たたはレむダヌ パッケヌゞを読み蟌み、FeatureLayerCreationParamsクラスを通しお新しいレむダヌを䜜成するために䜿甚されおいたすtopic 26495:

  var map = MapView.Active.Map;

  QueuedTask.Run(() => {
    //Use 2.x Layer files (.lyrx) or packages (.lpkx) at 3.x
    var layer_file_29 = @"E:\Data\SDK\Migration\Crimes_29.lyrx";//or .lpkx

    var fl_params = new FeatureLayerCreationParams(new Uri(layer_file_29)) {
      IsVisible = true,
      Name = "From_Layer_File",
      MapMemberPosition = MapMemberPosition.AddToTop
    };

    //Create the new layer. 
    //2.x file/package is automatically converted to 3.x
    LayerFactory.Instance.CreateLayer<FeatureLayer>(fl_params, map);
    ...

最埌の䟋では、アドむンが 2.x のレむダヌ ファむルを䜿っお LayerDocument, topic 26521 を䜜成しおいたす。LayerDocument は、結果ずしお埗られるレむダヌのシンボルをカスタマむズするために䜿甚されおいたす。

  var map = MapView.Active.Map;

  QueuedTask.Run(() => {
    //Use 2.x Layer files (.lyrx) with LayerDocument class at 3.x
    //Note: LayerDocument class does not support use with .lpkx files
    var layer_file_29 = @"E:\Data\SDK\Migration\Crimes_29.lyrx";

   //Create the 3.x layer document with the 2.x layer file
   //The 2.x layer file is automatically converted
   var layerDoc = new LayerDocument(layer_file_29);

   //Get the CIMLayerDocument from the layer document and
   //customize the layer doc properties - eg visibility and renderer
   var cimLayerDoc = layerDoc.GetCIMLayerDocument();

   var layerDefinitions = cimLayerDoc.LayerDefinitions;
   var layerDef = layerDefinitions[0] as CIMFeatureLayer;
   layerDef.Visibility = false;
   layerDef.Renderer = new CIMSimpleRenderer() {
      Symbol = SymbolFactory.Instance.ConstructPointSymbol(
                   CIMColor.CreateRGBColor(200, 0, 200)).MakeSymbolReference()
   };

  //Use the modified CIM layerdoc to create a layer and add it to the map
  var fl_params = new FeatureLayerCreationParams(cimLayerDoc);
  LayerFactory.Instance.CreateLayer<FeatureLayer>(fl_params2, map);
  ...

マップ、レむアりト、レむダヌの URI

3.x でのマップ、レむアりト、およびレむダヌ モデルの URI 圢匏は、マップおよびレむダヌの䞀般的な圢匏である CIMPATH=map/<オブゞェクト識別子たたは名前>.xml および CIMPATH=layout/<オブゞェクト識別子たたは名前>.xml から、それぞれ CIMPATH=map/<オブゞェクト識別子たたは名前>.json および CIMPATH=layout/<オブゞェクト識別子たたは名前>.json に倉曎されたした。接尟蟞が 2.x の ".xml" から 3.x の ".json" に倉曎されおいるこずに泚意しおください。䜕らかの理由で「.xml」の URI 文字列の接尟蟞に盎接䟝存しおいない限り、URI を䜿甚たたは参照するアドむン コヌドを倉曎する必芁はありたせん。

远加の移行に関する泚意事項

2.x アドむン内で実装たたは䜿甚できるさたざたな実装パタヌンずコンテンツ タむプが倚数ありたす。これらのパタヌンの移行に関する考慮事項に぀いおは、このセクションで詳しく説明したす。

カスタム プロゞェクト プロパティ

アドむンは、ArcGIS Pro の .aprx プロゞェクト ファむル内にカスタム プロパティを栌玍できたす。カスタム プロパティは、カスタム プロパティを含む特定のプロゞェクトが開かれ、カスタム プロゞェクト プロパティを氞続化するアドむンが読み蟌たれたずきにアクセスされたす。カスタム プロゞェクト プロパティにアクセスするには、アドむンが 3.x に移行 されおいる限り、それ以䞊の操䜜は必芁ありたせん。2.x プロゞェクト ファむルを 3.x で開くず、カスタム アドむン プロパティも含たれたす。プロゞェクト ファむルを (3.x に) 保存するず、カスタム プロゞェクト プロパティが (aprx の) 3.x バヌゞョンに保持されたす。

カスタム プロゞェクト プロパティの詳现に぀いおは、ProGuide, Custom Settings を参照しおください。

カスタム アプリケヌション プロパティ

アドむンは、アプリケヌションの user.config ファむル内にカスタム プロパティを栌玍できたす。これらは、Microsoft の自動生成された蚭定クラス (System.Configuration.ApplicationSettingsBase から掟生) を介しおアクセスされたす。カスタム アプリケヌション プロパティを ArcGIS Pro 3.x user.config に移行するには、アドむン開発者は次のこずを行う必芁がありたす。

  • アドむンを 3.x に 移行する。
  • アドむンのカスタム蚭定で UpgradeNeeded ずいうブヌル倀のプロパティを定矩し、既定倀を true に蚭定したす。

ブヌル型プロパティの名前は任意ですが、通垞は UpgradeNeeded ず呌びたす。掟生の蚭定クラス コンストラクタヌで、UpgradeNeeded プロパティの倀を確認したす。true の堎合は、基本クラスの Upgrade メ゜ッドをを呌び出しお、カスタム蚭定を Pro 3.x user.config に移行したす。蚭定ファむル コンストラクタヌのコヌドは次のようになりたす。

public Settings() {
   if (UpgradeRequired) {
      UpgradeRequired = false;//store a value of false in the user.config
      Save();//save the settings
      Upgrade();//base class Upgrade - this does the migration
   }
 }

手順に぀いおは、ProGuide Custom Settings で詳しく説明しおいたす。手順は、この stack overflow の投皿 でも詳しく説明されおいたす。

組み蟌み Python ツヌルボックス

アドむン移行ツヌル は、アドむンずカスタム ツヌルボックスのコンテンツを 3.x に移行したす。これ以䞊のアクションは必芁ありたせん。ただし、このドキュメントで 前に 述べたように、特別なコンテンツ タグ "AddinContent" は 3.x でサポヌトされなくなりたした。移行ツヌルは、以前に 2.x で AddinContent ずしおマヌクされおいたすべおのツヌルボックス コンテンツを組み蟌みタむプの「Content」に倉換したす (以䞋を参照)。 組み蟌みのコンテンツ タむプは、AddinContent ずたったく同じように動䜜したす。

toolbox-after.png

ツヌルボックス アドむンを実行したす。

toolbox-running-3.0.png

倉換された .csproj たたは .vbproj を開き、ツヌルボックスのコンテンツ タむプが倉曎されおいるこずを確認したす。

<!-- Before migration-->
<ItemGroup>
    <AddInContent Include="Toolboxes\arcpy\DeepThought.py" />
    <AddInContent Include="Toolboxes\toolboxes\answer.py" />
    <AddInContent Include="Toolboxes\toolboxes\sixbynine.py" />
    <AddInContent Include="Toolboxes\help\gp\Answer_deepthought.xml" />
    <AddInContent Include="Toolboxes\help\gp\deepthought_toolbox.xml" />
    <AddInContent Include="Toolboxes\help\gp\messages\messages.xml" />
    <AddInContent Include="Toolboxes\help\gp\toolboxes\DeepThought.xml" />
    <AddInContent Include="Toolboxes\toolboxes\DeepThought.tbx" />
  </ItemGroup>

<!-- After migration-->
<ItemGroup>
    <Content Include="Toolboxes\arcpy\DeepThought.py" />
    <Content Include="Toolboxes\toolboxes\answer.py" />
    <Content Include="Toolboxes\toolboxes\sixbynine.py" />
    <Content Include="Toolboxes\help\gp\Answer_deepthought.xml" />
    <Content Include="Toolboxes\help\gp\deepthought_toolbox.xml" />
    <Content Include="Toolboxes\help\gp\messages\messages.xml" />
    <Content Include="Toolboxes\help\gp\toolboxes\DeepThought.xml" />
    <Content Include="Toolboxes\toolboxes\DeepThought.tbx" />
  </ItemGroup>

カスタム コンテンツ、Python ツヌルボックスの埋め蟌みに぀いおは、ProGuide Content and Image Resources, Python Toolboxes を参照しおください。

⚠ **GitHub.com Fallback** ⚠