Pro定製開發路徑與文件分析

 

目錄

 

1、前言

2、自定義項目組成

3、Pro配置組織解析

3.1 Bin目錄

3.1.1 Bin目錄

3.1.2 Extentions目錄

3.2 自定義程序集位置

3.2.1 編譯項目時會生成哪些文件?

3.2.2 啓動時讀取的插件程序集存放位置

3.2.3 分析一

3.2.4 分析二

3.2.5 分析三

3.2.6 總結

4、 自定義功能配置組織方案

4.1 自定義啓動方式

4.2 程序集組織

4.2.1 Net運行時如何查找程序集

4.2.2 使用元素指定程序集位置

4.2.3 公共的程序集組織方式

4.2.4 參考Pro子模塊組織自定義的插件

5、參考地址:


1、前言

在網上查詢了很多Pro開發的資料,可惜沒有找到以Pro定製開發的方式如何形成自己的產品,想要以Pro定製開發的方式形成自己的產品,必須解決配置組織方式、自定義程序集加載、部署發佈等問題。

此文解決以下幾個問題:

  1. 如何以自定義配置啓動;
  2. 自定義的插件程序集如何組織存放;
  3. 怎樣部署。

2、自定義項目組成

首先介紹自定義的極簡軟件系統的組成部分:

  1. 配置管理模塊:配置和開發自定義的啓動界面、登錄界面等。
  2. 業務插件模塊:自定定製和開發的一些插件功能。
  3. 公共函數庫:封裝的一些業務模塊調用的公共函數庫。

業務模塊程序集依賴公共函數程序集:

 

3、Pro配置組織解析

首先來看看Pro是如何組織他的dll和配置的。

 

3.1 Bin目錄

3.1.1 Bin目錄

Bin目錄包含:

  • 應用程序集和應用程序集配置;

 

  • 核心程序集及依賴的其他程序集:

  • Extensions目錄:子模塊dll及配置存放目錄;
  • Python目錄:Python環境;
  • zh-CN目錄:存放漢化相關的目錄;

等等。

 

Bin目錄

 

 

 

3.1.2 Extentions目錄

Exentions存放了Pro所有子模塊相關的dll和配置,譬如編輯模塊、GP模塊等。每個模塊文件夾存放模塊相關的dll、daml配置以及依賴的dll和配置等。

Extentions目錄

 

子模塊目錄

 

 

 

 

3.2 自定義程序集位置

我們定製開發時生成的應用程序集Pro是怎麼存放的呢?

 

 

3.2.1 編譯項目時會生成哪些文件?

  • 項目生成目錄下的文件:

 

  • 此外,在用戶的文檔目錄C:\Users\Administrator\Documents\ArcGIS\AddIns\ArcGISPro】下也會生成一份ESRI AddinX File文件

 

 

 

 

3.2.2 啓動時讀取的插件程序集存放位置

通過ConfigurationManager類的OnUpdateDatabase方法觀察Pro啓動時讀取自定義的dll位置。

OnUpdateDatabase方法介紹

 

Pro運行時經調試發現讀取的DLL位置:

C:\Users\Administrator\AppData\Local\ESRI\ArcGISPro\AssemblyCache

【C:\Users\Administrator\AppData\Local\ESRI\ArcGISPro\AssemblyCache】目錄下的內容:

 

 

3.2.3 分析一

刪除用戶文檔目錄下的內容,啓動Pro會加載自定義的插件模塊嗎?

結果

不會加載自定義的插件模塊,並清除AssemblyCache目錄下的內容。

 

 

3.2.4 分析二

刪除項目Debug和AssemblyCache目錄下的內容,啓動Pro會加載自定義的插件模塊嗎?

結果:

會加載自定義的插件模塊,並在AssemblyCache目錄下生成程序集信息。

 

 

3.2.5 分析三

插件依賴的dll是怎麼組織的?

如果將項目的屬性的複製到本地屬性設置爲false,則編譯時不會像依賴的dll複製到生成目錄,同樣也不會嵌入到ESRI AddinX File文件中。啓動Pro時會因爲缺乏依賴的dll會導致插件功能不能正常使用。

如果將複製到本地設置爲true,則會嵌入到ESRI AddinX File文件中。

 

複製到本地設置爲false

 

複製到本地設置爲true

 

 

 

3.2.6 總結

  • ESRI AddinX File文件包含了程序插件相關的配置信息、.dll甚至.pdb文件。
  • Pro啓動時會讀取用戶文檔目錄【C:\Users\Administrator\Documents\ArcGIS\AddIns\ArcGISPro】下ArcGIS的自定義插件信息【ESRI AddinX File文件】,並解析該文件的配置信息,另外以此在目錄【C:\Users\Administrator\AppData\Local\ESRI\ArcGISPro\AssemblyCache】下抽取生成DLL。
  • Pro啓動時加載的程序集位置出來Bin和Extentions目錄下的dll外,還會加載目錄【C:\Users\Administrator\AppData\Local\ESRI\ArcGISPro\AssemblyCache】下的dll。
  • 使用Pro的【ESRI AddinX File文件】定製插件,需要包含依賴的dll。

 

4、 自定義功能配置組織方案

4.1 自定義啓動方式

按以下方式創建自己的快捷方式就可以以自定義的配置方式啓動ArcGIS Pro。

  • 將配置項目的生成文件拷貝到ArcGIS Pro的bin目錄。
項目生成目錄
Bin目錄

 

  • 創建ArcGIS Pro.exe的框架方式,右鍵屬性-快捷方式-目標:設置爲以自己定義的配置啓動。

 

 

4.2 程序集組織

在3.2章節分析了Pro對用戶開發的插件的組織方式,但是用於開發產品不適於進行自動化部署,有可能在清理磁盤空間被用戶勿刪,另外有個更大的問題時如果開發的插件依賴其他的dll,需要把依賴的dll都包含在ESRI AddinX File文件裏面,否則程序無法運行,這樣會導致發佈的文件特別大。

那麼我們是否有其他的解決方案去組織自己開發的程序集和配置呢?

 

 

4.2.1 Net運行時如何查找程序集

請參閱運行時如何查找程序集

 

 

4.2.2 使用<probing>元素指定程序集位置

使用應用程序配置文件中的<probing>元素來指定運行時在查找程序集時應搜索的子目錄。以下示例顯示如何指定運行時應搜索的目錄。

privatePath屬性包含運行時應搜索程序集的目錄。如果應用程序位於C:\ Program Files \ MyApp,則運行時將查找未在C:\ Program Files \ MyApp \ Bin,C:\ Program Files \ MyApp \ Bin2 \ Subbin中指定代碼庫的程序集,和C:\ Program Files \ MyApp \ Bin3。privatePath指定的目錄必須是應用程序基目錄的子目錄。

 

 

4.2.3 公共的程序集組織方式

  • 在bin目錄下新建Common文件夾;

  • 將公共程序集拷貝都該目錄;
  • 修改ArcGISPro的應用程序配置文件,將Common目錄加入到PrivatePath裏面。
    應用程序配置

 

內容

 

 

 

4.2.4 參考Pro子模塊組織自定義的插件

在Extentions文件夾下新建自定義模塊的目錄CustomFeatures,將插件相關的dll和daml配置拷貝過去。依賴的程序集放到Bin的子目錄Common文件夾下,無需拷貝過來。

 

 

5、參考地址:

https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/specify-assembly-location

http://pro.arcgis.com/zh-cn/pro-app/sdk/

https://github.com/esri/arcgis-pro-sdk/wiki/ProSnippets-Framework

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章