Итак, сегодня я столкнулся с интересной проблемой, пытаясь построить наше решение для компании, и я хотел спросить вас, ребята, знаете ли вы, почему это происходит. Мне сказали, что это может быть из моей машинной/визуальной студии, потому что у других людей не было той же проблемы.
Итак, у нас есть метод в проекте 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 : "";
}
Я должен указать, что мы ссылаемся на проект B
в проекте A
.
Теперь случается, что когда я пытаюсь построить, я получаю ошибку компиляции:
Ошибка 966 Тип "System.Xml.Linq.XElement" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку "System.Xml.Linq, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089". D:\Repositories\website\website\subsodules\core\src\A\Extensions\Extensions.cs 37 13 A
Что происходит, так это то, что компилятор думает, что я фактически использую метод GetAttribute
из проекта B
(на мой взгляд!). Почему это происходит? Поскольку, когда я пытаюсь перейти к GetAttribute
, VS приводит меня к правильному методу (тот, который находится в ReflectionHelpers
).
Может быть, из-за отражения? ПРИМЕЧАНИЕ. Я исправил эту проблему, вызвав метод статически или добавив ссылку на System.Xml.Linq в моем проекте A
, но мне любопытно странное поведение функции проверки VS/синтаксиса.