- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的项目引用类型为 SomeType
的 TypesDefinitionAssembly
,它由 XSerializationLibrary
和 中的属性
来自 XSerializationOptions
标记>YSerializationOptionsYSerializationLibrary
。
显然,要检查SomeType
是否由XSerializationOptions
标记,我还需要引用XSerializationLibrary
。但是,我不想引用 YSerializationLibrary
(它甚至可能不可用)。
目前,调用
typeof(SomeType).IsDefined(typeof(XSerializationOptions))
失败是因为 IsDefined
出于某种原因遍历所有属性并尝试解析它们的所有类型。异常看起来像:
System.IO.FileNotFoundException: Could not load file or assembly 'YSerializationLibrary, Version=1.2.3.4, Culture=neutral, PublicKeyToken=0123456789abcdef' or one of its dependencies. The system cannot find the file specified.
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.ModuleHandle.ResolveTypeHandle(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.IsCustomAttributeDefined(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, RuntimeType attributeFilterType, Int32 attributeCtorToken, Boolean mustBeInheritable)
at System.Reflection.CustomAttribute.IsDefined(RuntimeType type, RuntimeType caType, Boolean inherit)
有没有办法解决这个问题?如何在不引用完全不相关的 YSerializationLibrary
的情况下检查是否在 SomeType
上定义了 XSerializationOptions
?
一旦您考虑到 XSerializationLibrary
本身会调用 Enum.IsDefined
,问题就会变得更糟;因此,除非您还引用 YSerializationLibrary
,否则无法使用 SomeType
与 XSerializationLibrary
进行序列化。
最佳答案
在您无法在运行时访问 Y 库的非常特殊的情况下,您可能会尝试使用您无权访问的具有相同名称和命名空间的新类来伪造该属性:
using System;
using System.Linq;
using ClassLibraryAssembly;
using OtherAssemblyX;
// This is a faking attribute, with same signature of that in unavailable assembly.
namespace OtherAssemblyY
{
public class YAttribute : Attribute
{
}
}
namespace MainAssembly
{
class Program
{
static void Main(string[] args)
{
var type = typeof (SomeType);
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>
{
if (eventArgs.Name == "OtherAssemblyY, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
return typeof(Program).Assembly;
return null;
};
Console.WriteLine(type.IsDefined(typeof (XAttribute), true));
foreach (var attrObject in type.GetCustomAttributes(true))
{
Console.WriteLine("Attribute found: {0}, Assembly: {1}", attrObject, attrObject.GetType().Assembly);
}
}
}
}
结果:
True
Attribute found: OtherAssemblyY.YAttribute, Assembly: MainAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Attribute found: OtherAssemblyX.XAttribute, Assembly: OtherAssemblyX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
关于c# - 如何防止 MemberInfo.IsDefined 在不相关的属性上抛出 FileNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803956/
我的问题涉及检查属性的继承属性。 如 this Question 中所述方法 Attribute.IsDefined(MemberInfo, Type, Boolean) (1) 和 MemberIn
关于如何转换枚举以及如果解析的值超出范围会发生什么,还有一些其他问题,例如: public enum SomeTypes { SomeType1 = 1, SomeType2 = 2,
测试是否存在更快isdefined("arguments.argument")或为 arguments.argument 设置默认值? 最佳答案 我使用 isDefined() 进行了测试, stru
查看 Scala 中 scala.concurrent.SyncVar[A] 的实现,我们看到以下声明: class SyncVar[A] { private var isDefined: Boo
有人可以给我一个使用 Attribute.isDefined() 来检查特定自定义属性是否已应用于给定类的示例吗? 我已经检查了 msdn,但只看到了应用于程序集、成员等的属性的可能性。我也愿意使用其
我有这个枚举: [Flags] public enum ExportFormat { None = 0, Csv = 1, Tsv = 2, Excel = 4,
我正在读这本书 C# 4.0 in a Nutshell ,顺便说一下,我认为这是一本优秀的书,即使是高级程序员也可以作为很好的引用。 我在回顾有关基础知识的章节时,遇到了一个技巧,可以在使用带标记的
与 foo === undefined 相比,angular.isdefined 有什么好处? 我不能马上想到什么好处。 最佳答案 在 Javascript 中以任何方式访问真正 undefined
我试图找出 url 变量是否存在,如果不存在,请确保它不为空。 这不起作用: // 最佳答案 ... 关于冷聚变 8 : IsDefined ('URL.variable' ) and i
我有一个关于cfargument 的问题。如果我在调用 .cfc 时发送参数,首先将其定义为参数有什么好处吗? 或者我可以只在函数内部使用 IsDefined(),而不定义参数吗?
我的代码中充斥着以下代码模式: val opt = somethingReturningAnOpt if (opt.isDefinedAt) { val actualThingIWant =
我正在使用 ColdFusion 9.0.1 我最近读到,在 ColdFusion 9 中,现在建议使用 isNull()并且不使用 isDefined() 。 我在网上没有找到太多关于这方面的信息。
我怎样才能更有效地执行以下操作: myoptionList.filter(_.isDefined).map(_.get) 这将需要两次迭代时间,有没有更好的方法来做到这一点? 最佳答案 你有几个选择。
我有: 我收到错误:“变量事件未定义。” 嗯? 哦,错误在于 isDefined ,不与 cfset . 最佳答案 isDefined takes the name of a varia
这个问题特定于 angular.isDefined() 被命名为 isDefined。如果传递给它的变量未定义,我们不期望它找到返回 false 的方法,而不是抛出 Uncaught Error 。我
我对字符串使用了 Enum.IsDefined() 方法,但在我认为应该得到 True 的情况下得到了 False >。请检查以下代码: public enum YourEnum : int {
受到 SO 问题的启发。 Attribute 类有几个重载 IsDefined()方法。涵盖的是应用于 Assembly、Module、MemberInfo、ParameterInfo 的属性。 Me
在传递 JSON 数组以构建 sql 查询时,如果列名字符的名称超过 30 个字符,则会获取 None 作为值。这是我的构建器的功能。 import com.itfsw.query.builder.S
我在 Coldfusion 2018 中使用 session 变量,并且我正在尝试弄清楚如何按照 if 语句的设置方式添加变量。 - All signatures ar
在我的代码中,我使用了许多小型枚举: enum UserRequest : byte { Burp=1, Sneeze=2, Fart=3 } 我经常需要在将整数输入转换为该枚举之前验证它。 bool
我是一名优秀的程序员,十分优秀!