不能對Revit插件進行強簽名

背景

最近正在研發一款Revit插件,爲加強dll間引用的關聯性,對發佈的所有dll進行了強簽名。
在Revit加載強命名的插件後,執行插件命令,程序拋出異常未能加載文件或程序集或它的某一個依賴項。需要強名稱程序集。

問題原因

強命名程序集的引用規則

假設一個項目的dll通過以下的方式進行引用

A
B
C
D
F
E
G

其中dll B是強命名的程序集,則被它引用的D/E/F都需要是強命名程序集。而引用B的項目A不需要強命名。

RevitAPI

查看了一下插件項目的引用,發現RevitAPI.dll和RevitAPIUI.dll都是弱命名程序集,因此插件本身不能進行強命名。

官方解析

有兩篇文章說到Revit或AutoCAD插件無法進行強命名
1. Revit API: Not Strong Named (cont.)
2. No Inheritance and No Strong Naming
3. Can I sign my AutoCAD .NET plug-in with a strong name

大致原因是

  1. 強命名會導致插件補丁工作更復雜
  2. 強命名程序集需要放到GAC裏纔可以避免命名檢查的性能損耗
  3. AutoCAD2015的插件曾經支持強命名,但考慮到太複雜,在後續的版本被移除了

當然還有解決方案(基於安全方面的考慮)

  • 只信任部分網絡
  • 認證爲Autodesk開發者並認證你的插件應用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章