将多个插件 dll 文件加载到 Autodesk Revit 中

Load multiple addin dll files into Autodesk Revit

我正在安装我的 Revit 插件的两个实例。当我 运行 Revit 时,功能区面板中的所有内容都正确显示:两个下拉列表 - 每个实例一个。 问题是,即使每个插件文件的每个路径都指向不同的位置,它们都访问同一个 dll 文件(首先加载的那个)。

插件文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
  <RevitAddIns>
    <AddIn Type="Application">
      <Assembly>C:\A\My.Application.dll</Assembly>
      <ClientId>{GUID1}</ClientId>
      <Name>My Plugin A</Name>
      <FullClassName>My.Application.Application</FullClassName>
    </AddIn>
  </RevitAddIns>

<?xml version="1.0" encoding="utf-8"?>
  <RevitAddIns>
    <AddIn Type="Application">
      <Assembly>C:\B\My.Application.dll</Assembly>
      <ClientId>{GUID2}</ClientId>
      <Name>My Plugin B</Name>
      <FullClassName>My.Application.Application</FullClassName>
    </AddIn>
  </RevitAddIns>

我已经更改了每个条目,但无法让 Revit 加载两个不同的文件。

非常感谢任何想法或提示。

.NET AppDomain 不会加载相同的 class 两次。而Revit正是采用了这种机制。

对于您的情况,我建议编辑 AssemblyInfo.cs 文件。首先,我建议您为构建的每个程序集使用不同的名称(使用不同版本的参考)。如果您必须保持相同的名称,您可以考虑使用不同的版本,以便 .NET AppDomain 加载两者。以下是您应该考虑更改的属性:

[assembly: AssemblyTitle("Name01")]
[assembly: AssemblyProduct("Name01")]
[assembly: AssemblyFileVersion("1.0.1")]
[assembly: AssemblyInformationalVersion("1.0.1")]

要维护相同的代码,您可以使用 C# Preprocessor Directives 并编译两种情况(在构建期间创建两个 DLL)。