Revit api 和 .net 5

Revit api and .net 5

我想知道是否可以使用.net5开发revit插件,因为开发revit插件的原生平台是net47。

一个以两种不同方式显示消息的简单测试用例,MessageBox 来自 PresentationFrameworkTaskDialog 来自 Revit api

    public class RevitExternalCommand : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            //MessageBox.Show("net 5 test");
            TaskDialog.Show("net 5 test", "Revit");

            return Result.Succeeded;
        }
    }

当使用TaskDialog.Show("net 5 test", "Revit")时一切正常。命令启动时显示的消息。

MessageBox.Show("net 5 test") 不起作用,因为“无法加载文件或程序集”错误:

根据我在网上找到的和了解的内容,似乎不能保证使用 .NET 5 与 Revit API(目前在 .NET Framework 4.8 上)一起工作: 与 .NET Framework 4.8 兼容的代码应该可以工作。然而,虽然 .NET 5 和 .NET Framework 4.8 似乎完全包含 .NET Standard 2.0,并且存在允许 .NET Standard 项目引用 .NET Framework 项目的“.NET Framework 兼容模式”(https://docs.microsoft.com/en-us/dotnet/standard/net-standard) ,不保证兼容模式适用于所有 .NET Framework 项目,具体取决于这些项目使用的内容(例如 WPF)。 因此,我认为 Revit API 可能会使用 .NET Framework 4.8 的某些部分,这些部分不完全符合 .NET Standard,并且不在该“兼容模式”(例如 WPF)范围内。 这也是我如何解释 https://thebuildingcoder.typepad.com/blog/2021/01/face-triangulation-lod-net-5-and-core.html

上的答案

我想,只要 Revit 不将其 API 迁移到 .NET 5,加载项就应该以 .NET Framework 为目标,但它们当然可以引用 .NET Standard 2.0 库,使这些库更容易重新用于不是在 .NET Framework 中创建的其他项目。

这是我通常遵循的路线,将尽可能多的代码放在 .NET Standard 2.0 库中(出于兼容性原因)并且仅在真正需要时才使用 .NET Framework(例如,因为与现有的链接API 在 .NET Framework 中)。