今日、会社のソリューションを構築しようとしているときに興味深い問題に直面しました。なぜこれが起こっているのか知っていますか?他の人は同じ問題を抱えていなかったので、私のマシン/ビジュアルスタジオからのものである可能性があると言われました.
したがって、 project にメソッドがあります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
project内の 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/構文チェック機能の奇妙な動作に興味があります。