解决System.Runtime.CompilerServices.ExtensionAttribute..ctor 与 ‘ExtensionAttribute’ is ambiguous in th

本文解决了在老项目中遇到的System.Runtime.CompilerServices.ExtensionAttribute..ctor 编译错误问题,并介绍了如何通过调整目标框架来解决该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从VSS上获取以前的老项目,编译时报
System.Runtime.CompilerServices.ExtensionAttribute..ctor
网上写的“ 删除 Newtonsoft.Json.Net20.dll 后重新引用”,并没有解决这个问题。


////缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor”
namespace System.Runtime.CompilerServices
{
public class ExtensionAttribute : Attribute { }
}
倒是编译通过了,更新到老网站上,即无法打开页面,报这个错误。
'ExtensionAttribute' is ambiguous in the namespace 'System.Runtime.CompilerServices'
用最新的Newtonsoft.json也不行。

就是前面加的那3行代码,与已有的冲突了。
所以删除前面加的3行代码。删除这3行代码,又会回到最初的问题,编译时报System.Runtime.CompilerServices.ExtensionAttribute..ctor



最后把目标框架,选择到最新。像这样

就行了


### 如何在 Flowable 中获取自定义属性值 为了实现这一目标,在 Flowable 设计器中设置好节点的自定义属性之后,可以通过编程方式访问这些属性。对于流程中的任意元素,可以利用 `FlowElement` 接口来取得该元素及其附加的信息。 当需要读取特定活动(如用户任务)上的自定义属性时,可采用如下方法: #### 获取指定 ID 的流对象并提取其自定义属性 通过调用 `process.getFlowElementMap()` 方法获得整个 BPMN 流程图内所有流对象的地图集合,再依据具体活动ID定位到对应的流对象实例[^1]。 ```java // 假设 activityId 是要查询的目标活动唯一标识符 String activityId = "someActivityId"; FlowElement flowElement = process.getFlowElementMap().get(activityId); if (flowElement instanceof UserTask){ UserTask userTask = (UserTask) flowElement; // 获取所有的扩展元素作为 Map<String, List<ExtensionElement>> Map<String, List<ExtensionElement>> extensionElements = userTask.getExtensionElements(); } ``` 上述代码片段展示了如何先找到具体的 `UserTask` 实例,进而获取它的全部扩展元素列表。这里的 `extensionElements` 就包含了所有已配置好的自定义属性键值对[^2]。 如果想要进一步处理某个特别命名的自定义属性,则可以根据名称检索相应的 `List<ExtensionElement>` 并解析其中的内容。通常情况下,每个 `ExtensionElement` 对象会携带有关此自定义字段的数据类型以及实际存储的位置等元数据信息。 #### 解析单个自定义属性的具体内容 假设有一个名为 `"customProperty"` 的自定义属性被添加到了某用户的任务上,那么就可以按照下面的方式去获取它的确切数值: ```java import org.flowable.bpmn.model.ExtensionAttribute; ... List<ExtensionElement> customProperties = extensionElements.get("customProperty"); for(ExtensionElement element : customProperties){ String value = null; for(ExtensionAttribute attribute : element.getAttributes()){ if ("value".equals(attribute.getName())){ value = attribute.getValue(); break; } } System.out.println("Custom Property Value: "+value); } ``` 这段 Java 代码遍历了给定名字下的每一个可能存在的多值情况,并最终打印出了所关心的那个字符串类型的自定义属性的实际值[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值