AutoCAD .NET framework支持情况
出处
https://forums.autodesk.com/t5/net/net-framework-support/m-p/9403930
问题描述
我想问一下是否有一些官方表格.Net framework支持。有人有关于支持.NET 5的信息/经验吗?
回答1(03-27-2020)
附加了一个用于AutoCAD/Visual Sudio兼容性的非官方表格。
我没有测试,但是.NET Framwork 5.0应与所有AutoCAD版本兼容。
如表所示,AutoCAD版本要求最低.NET版本,但与更高版本兼容。
回答2(05-13-2020)
嗨,恐怕没那么简单。
.NET 5不是.NET framework。它是.NET Core和.NET Standard的组合。
.NET framework的最后一个版本是4.8。Microsoft未来不会发布的任何版本的.NET framework。
https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/
我用.NET 5.0构建了一个最简单的插件DLL,引用了AutoCAD 2021中的“acoremgd.dll”、“acmgd.dll”和“acdbmgd.dll“。
由于出现以下错误,我无法使用“NETLOAD”命令在AutoCAD中加载此DLL:
Cannot load assembly. Error details: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
File name: 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent)
at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly, RuntimeType caType)
at Autodesk.AutoCAD.ApplicationServices.AutoCADApplicationHolder.Initialize(Assembly assembly)
at Autodesk.AutoCAD.ApplicationServices.ExtensionLoader.ProcessAssembly(Assembly assembly)
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
对于.NET 5.0,AutoCAD用于查找具有CommandMethod属性的方法的反射似乎无法使用。
无论我是将DLL发布为自包含部署还是框架相关部署,我都会收到这个错误,所以这个错误并不意味着我的DLL找不到一些引用。从调用堆栈中可以看出,错误显然来自AutoCAD代码库。
我还想指出,我在我的测试机器上的AutoCAD之外成功运行了.NET5,只是为了避免任何我不知道如何部署.NET应用程序。
所以,总之,我不认为当前版本的AutoCAD支持.NET 5。
我们可能需要等待Autodesk正式支持它。
否则,它们将被.NET framework4.8卡住。
有点奇怪的是,没有更多的活动,或者Autodesk没有发布官方声明,让开发人员做好准备。
回答3(05-22-2020)
.NET5非常有趣,但仍然是一项相当新的技术。它仍在预览中,微软宣布它不会是LTS版本(.NET6将是第一个LTS版本)
据推测,Autodesk目前正在相当深入地(内部)评估这项新技术对其产品的影响,但现在发布关于插件API的足够可靠的路线图可能还为时过早。
许多与我所知的两种Autodesk产品(AutoCAD/Revit)相关的Microsoft技术是最近才添加到其中的NET Core 3.1,这是.NET5的技术基础。我记得.NET5(Core)的部分运行时实际上源于Mono(Linux)。这是有道理的,因为.NET5现在是跨平台的——除了某些例外,例如即将推出的WinUI3和C++/CLI仅在Windows上受支持。
现在,虽然技术基础已经发生了相当根本的转变,但实际升级到了.NET Core的目标(包括.NET5)可以是非常无缝的——或者看起来是这样。
但是,由于此原因,.NET Framework运行时无法加载.NET Core程序集.dll文件,正如您所观察到的。这不是意料之中的事。反射信息在程序集中的存储方式确实发生了更改。我认为这是必要的,因为.NET5也支持AOC(提前编译)而不是JIT,类似于C++。(另一方面,还有一个兼容性层。)
两者有很大的区别,我还认为AutoCAD主机应用程序的大部分必须首先移植到.NET Core,或者更准确地说.NET 5,以便加载您的插件。这可能需要一些工作:
自从NET Framework 4.8是微软承诺将永远保留的LTS版本,我猜是这样.NET Framework 4.8可能在至少一到两年内仍然是Autodesk插件API的目标框架。
我也期待着关于采用这两种方法的路线图.NET Core 3.1或更可能的是.NET5由Autodesk AutoCAD/Revit提供。.NET Core性能提高看起来很有吸引力。.NET framework现在是一条死胡同。最好知道如何处理后者。
很快我们将计划插件产品移植到.NET Core的工作和时间表,这会适用于Autodesk AutoCAD/Revit,效果更佳!
回答4
这个.NET6将在Windows和macOS上运行,但我们没有收到Autodesk的消息。