Revit 2021使用ExternalResourceReference链接云模型报错咨询
问题产生原因
- Revit 2021对BIM 360云模型的
ExternalResourceReference校验规则做了更新,2020版本仅需传入项目ID、模型ID两个参数即可通过校验,2021版本新增了必填的云区域参数,缺失该参数就会触发「The ExternalResourceReference (resourceReference) is not in a format that is supported by its server」报错。 - 原代码通过服务名称匹配查找BIM 360服务器ID的逻辑不稳定,不同语言版本、不同更新补丁下的云服务显示名不一定严格为
BIM 360,容易拿到错误的服务器ID。 - 原代码存在变量名笔误:定义阶段取的GUID变量名为
linkedmodelguid、linkedprojectguid,构造字典时调用的是未定义的modelGuid、projGuid,实际运行时会传入空值,也会触发格式校验错误。
解决方法
使用官方推荐的云服务ID获取方式,补全2021版本要求的必填区域参数,修正变量笔误即可,修正后的代码向下兼容Revit 2020版本,具体实现如下:
var linkCloudPath = doc.GetCloudModelPath(); // 目标BIM360云模型的路径 Guid linkedModelGuid = linkCloudPath.GetModelGUID(); Guid linkedProjectGuid = linkCloudPath.GetProjectGUID(); string linkedRegion = linkCloudPath.Region; // 2021版本必填的云区域参数,直接从云路径获取 // 构造符合版本校验要求的外部资源参数字典 Dictionary<string, string> externalResourceParams = new Dictionary<string, string>() { {"LinkedModelProjectId", linkedProjectGuid.ToString()}, {"LinkedModelModelId", linkedModelGuid.ToString()}, {"LinkedModelRegion", linkedRegion} }; // 直接通过内置服务枚举获取云服务ID,避免名称匹配的兼容性问题 Guid cloudServerId = ExternalServiceRegistry.GetExternalServiceId(BuiltInExternalServices.CloudExternalService); // 构造外部资源引用,传入模型显示名、路径避免额外校验问题 ExternalResourceReference cloudRef = new ExternalResourceReference( cloudServerId, externalResourceParams, doc.Title, linkCloudPath.ToString() ); RevitLinkOptions linkOptions = new RevitLinkOptions(false); LinkLoadResult loadRes = RevitLinkType.Create(gcdoc, cloudRef, linkOptions); RevitLinkInstance.Create(gcdoc, loadRes.ElementId);
补充说明
- 2020版本会自动识别并忽略字典中多余的
LinkedModelRegion参数,上述代码无需做版本判断即可同时适配2020、2021版本。 - 禁止硬编码云服务显示名匹配服务器ID,该方式在多语言版本、特定区域部署的Revit环境中极易出现匹配失败问题。
内容的提问来源于stack exchange,提问作者Gangula
相关产品推荐
相关产品推荐

