所以今天我在尝试构建我们公司的解决方案时遇到了一个有趣的问题,我想问你们你们知道为什么会发生这种情况。我被告知它可能来自我的机器/视觉工作室,因为其他人没有同样的问题。
所以我们在项目中有一个方法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 : "";
}
我必须指出,我们在 project 中引用了B
project A
。现在发生的情况是,当我尝试构建时出现编译错误:
错误 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
发生的事情是编译器认为我实际上是在使用GetAttribute
项目中的方法B
(在我看来!)。为什么会这样?因为当我尝试导航到GetAttribute
VS 时,我找到了正确的方法(在 中的那个ReflectionHelpers
)。难道是因为反射?注意:我通过静态调用该方法或在我的项目中添加对 System.Xml.Linq 的引用来解决此问题A
,但我对 VS/语法检查功能的奇怪行为感到好奇。