如何解决Revit api 和 .net 5
我想知道是否可以使用.net5为revit开发插件,因为为revit开发插件的原生平台是net47。
以两种不同方式显示消息的简单测试用例,MessageBox
来自 PresentationFramework
和 TaskDialog
来自 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 Framework 兼容模式”允许 .NET Standard 项目引用 .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 框架)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。