You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在支持代码混淆的前提下实现.NET项目复用

可行解决方案

方案1:共享项目+IL合并

  • 将日志、许可、通用工具三类公共代码封装为SDK风格共享项目,在各插件项目引用时,通过MSBuild属性自动为共享代码生成的临时程序集添加插件唯一标识+版本后缀,例如Common.Logging.PluginA.v1_2_0.dll,同时可配置MSBuild任务自动为公共代码命名空间添加插件前缀,完全规避命名冲突。
  • 编译阶段使用ILRepack或Costura.Fody工具将公共程序集直接合并入当前插件的主DLL,无需单独分发公共DLL,天然解决SolidWorks单进程下的DLL重复加载冲突问题。公共代码可保持internal访问级,和插件代码一同参与混淆,完全不降低混淆强度,许可模块的安全性不受任何影响。
  • 强名称签名直接配置在插件主项目即可,合并后的程序集会自动继承主项目的签名配置,满足多版本共存要求。

方案2:优化内部NuGet包配置,保留internal访问级

  • 无需修改公共代码的访问级为public,提前将所有插件项目的强名称公钥添加到公共类库的InternalsVisibleTo属性中,示例配置:[assembly: InternalsVisibleTo("YourPluginName, PublicKey=你的公钥字符串")],插件即可正常访问公共类库的internal成员。
  • 公共类库先完成混淆再打包为NuGet包,发布时剔除pdb、XML文档等非必要内容,插件引用后直接使用已混淆的公共程序集,混淆效果不受任何影响。
  • 关闭各插件项目的绑定重定向(bindingRedirect)配置,CLR会自动识别不同版本的强名称程序集,允许同一SolidWorks进程内加载多个版本的公共DLL,不会出现冲突。

方案3:源NuGet包分发公共代码

  • 将公共代码打包为源NuGet包,包内仅包含源代码文件,不包含预编译的DLL。插件安装该包后,公共代码会自动纳入当前插件的编译上下文,相当于编译时直接嵌入插件主DLL。
  • 公共代码可保持internal访问级,和插件代码一同参与混淆,不存在单独的公共DLL,完全规避DLL加载冲突问题。
  • 源包支持按版本号发布,各插件可根据自身需求选择对应版本升级,互不干扰,强名称签名直接复用插件主项目配置即可。

内容的提问来源于stack exchange,提问作者brinkdinges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:24:01