因此,今天我在嘗試構建公司解決方案時遇到了有趣的問題,我想問問你們,你們知道爲什麼會發生這種情況。我被告知可能來自我的機器/視覺工作室,因爲其他人沒有同樣的問題。成員訪問調用不會編譯,但靜態調用不會
因此,我們必須在項目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 : "";
}
我必須指出o我們在項目A
中參考項目B
。 現在發生的事情是,當我嘗試建立我得到編譯錯誤:(!在我看來)
Error 966 The type 'System.Xml.Linq.XElement' is defined in an assembly that is not referenced. You must add a reference to assembly '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
)。 難道是由於反射? 注意:我通過靜態調用方法或在我的項目A
中添加對System.Xml.Linq的引用來解決此問題,但我很好奇VS /語法檢查功能的奇怪行爲。
你引用包含的XElement組裝?因爲它告訴你_thats_問題;沒有提到方法名稱。我的意思是你嘗試添加System.xml.linq? –
是的,我試過這個問題確實解決了問題,但正如我所說我們找到了解決方案,但奇怪的行爲仍然存在,我很好奇。再加上引用'System.XML.LINQ'就能解決這個問題,但奇怪的是編譯器在引起混淆之前很明顯(對他來說可能不那麼明顯),我沒有使用任何XElements。 – kuskmen
但是你在項目B中做? –