所以我们在项目
A
中有一个方法:private static string RpcRoutingKeyNamingConvention(Type messageType, ITypeNameSerializer typeNameSerializer)
{
string queueName = typeNameSerializer.Serialize(messageType);
return messageType.GetAttribute<GlobalRPCRequest>() != null || AvailabilityZone == null
? queueName
: queueName + "_" + AvailabilityZone;
}
GetAttribute<GlobalRPCRequest>()
在public static class ReflectionHelpers
中定义。
public static TAttribute GetAttribute<TAttribute>(this Type type) where TAttribute : Attribute;
然后我们有项目B
,其中有一个方法:
public static string GetAttribute(this XElement node, string name)
{
var xa = node.Attribute(name);
return xa != null ? xa.Value : "";
}
我必须指出,我们在项目A
中引用了项目B
。现在发生的是,当我尝试构建时,会出现编译错误:
错误966:“System.Xml.Linq.XElement”类型定义在未被引用的程序集中。您必须添加对程序集“System.Xml.Linq,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。D:\Repositories\website\website\submodules\core\src\A\Extensions\Extensions.cs 37 13 A
发生的情况是编译器认为我实际上正在使用项目B
中的GetAttribute
方法(在我看来是这样!)。为什么会这样呢?因为当我尝试导航到GetAttribute
时,VS会将我带到正确的方法(即在ReflectionHelpers
中的方法)。这可能是因为反射吗?NOTE: 我通过静态调用该方法或在我的项目A
中添加对System.Xml.Linq的引用来解决了此问题,但我对VS/语法检查功能的奇怪行为很感兴趣。