我使用的是Add-in Manager 是这个开源项目

RevitAddInManager

项目逻辑

  1. 项目采取的办法是通过加载RevitAddinManage这个dll,并在文件中动态加载用户的测试dll从而达到快速加载,快速测试的目的
  2. 通过这种办法可以将多个程序附加到revit中并进行测试

问题点

  1. 我有一个测试文件叫做RevitTest,我的主要的工作文件为 A , A.UI , A.API ,,, 如果我将A的一个方法加载到测试文件中通过附着Add-in 进行测试,那么会出现 A更新之后无法依赖正确项的问题,必须重启才可以完成测试。下图可以看到多次测试会动态加载多个dll,这个是我修正之后的情况,修正之前XGZ_Tool只能依赖最早的一般,问题就出现在这里
![Image Description](https://cdn.bimath.com/blog/pg/Snipaste_2026-01-04_15-59-44.png)

Assembly.Load()

在具体了解解决办法之前,先了解一下Assembly.Load() , 通过这个函数可以动态加载我们需要的dll也就是add-in的关键函数,Load有三个函数

  1. Load()函数需要将dll的强名称传入进来,类似格式为System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
  2. LoadFrom() 将会根据文件路径加载,如果遇到同名的文件将会放弃加载,继续使用旧版本,可以看到下面两个图依赖的XGZ_Tool版本号一致,但是最新的版本号是1.0.0.84
![Image Description](https://cdn.bimath.com/blog/pg/Snipaste_2026-01-04_15-59-48.png)
![Image Description](https://cdn.bimath.com/blog/pg/Snipaste_2026-01-04_15-59-52.png)
3. LoadFile() 将会根据文件路径加载,但是不考虑重复名称等条件,直接加载,但是无法加载他的依赖项,还需要将依赖项逐步加载进来。**此处就是我的问题的原因,因为Add-In只加载测试文件,所以依赖项只在第一次调用时会触发缺项的机制从而引入,后续所有的添加依赖项,程序会首先在Runtime中查找是否有同名版本,由于我的版本号一直是1.0.0.0,程序默认无更改无需载入新的同名文件,导致我的XGZ_Tool更新后,运行无法更新**
![Image Description](https://cdn.bimath.com/blog/pg/Snipaste_2026-01-04_15-59-56.png)

解决办法

根据上面的分析,解决办法可以有两个 :

  1. 修改程序文件的版本号,将版本号修改为自增版本,这样调用LoadFile()函数将会根据RevitTest的依赖版本进行自动添加
1
2
3
4
5
6
7
8
9
10
11
12
13
<PropertyGroup>
<Version>$(RevitVersion)</Version>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<Description>A Peoject for Developer in Revit</Description>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<PublishSingleFile>true</PublishSingleFile>
<TargetFramework>net472</TargetFramework>
<VersionSuffix>1.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition="'$(VersionSuffix)' == ''">0.0.0.1</AssemblyVersion>
<AssemblyVersion Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</AssemblyVersion>
<Company>XGZ</Company>
<Authors>XGZ_Xu</Authors>
</PropertyGroup>
  1. 由于前面讲过RevitAddin的机制,所以如果是公司团队使用可以根据上面你的原理做一个自己的Add-in , 这样就可以更加灵活的使用。