Così oggi ho affrontato un problema interessante mentre cercavo di costruire la nostra soluzione aziendale e volevo chiederti ragazzi sapete perché sta succedendo questo. Mi è stato detto che potrebbe provenire dalla mia macchina/studio visivo perché le altre persone non hanno avuto lo stesso problema.La chiamata di accesso membro non viene compilata, ma la chiamata statica fa
Così abbiamo un metodo di progetto A
:
private static string RpcRoutingKeyNamingConvention(Type messageType, ITypeNameSerializer typeNameSerializer)
{
string queueName = typeNameSerializer.Serialize(messageType);
return messageType.GetAttribute<GlobalRPCRequest>() != null || AvailabilityZone == null
? queueName
: queueName + "_" + AvailabilityZone;
}
dove GetAttribute<GlobalRPCRequest>()
è definito in public static class ReflectionHelpers
public static TAttribute GetAttribute<TAttribute>(this Type type) where TAttribute : Attribute;
allora abbiamo progetto B
che hanno metodo:
public static string GetAttribute(this XElement node, string name)
{
var xa = node.Attribute(name);
return xa != null ? xa.Value : "";
}
I devo indicare o Se si fa riferimento al progetto B
nel progetto A
. Ora quello che succede è che quando provo a costruire ottengo errore di compilazione: (! A mio parere)
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
Che cosa sta accadendo è che il compilatore pensa che sto effettivamente usando GetAttribute
metodo dal progetto B
. Perché questo sta accadendo? Da quando provo a navigare su GetAttribute
VS mi conduce al metodo giusto (quello che è in ReflectionHelpers
). Potrebbe essere a causa del riflesso? NOTA:: Ho risolto il problema chiamando il metodo in modo statico o aggiungendo il riferimento a System.Xml.Linq nel mio progetto A
, ma sono curioso dello strano comportamento di VS/sintassi.
Stai riferimento al assembly contenente XElement? Perché ti dice che il problema è questo? nessun nome di metodo menzionato. Voglio dire, hai provato ad aggiungere System.xml.linq? –
Sì, ho provato questo in realtà risolvere il problema, ma come ho detto abbiamo trovato la soluzione di questo, ma lo strano comportamento rimane e mi sono incuriosito. Inoltre aggiungendo il riferimento a 'System.XML.LINQ' risolve il problema, ma è strano che il compilatore venga confuso prima di quella causa è ovvio (beh forse non è così ovvio per lui) che non uso alcun XElements. – kuskmen
Ma lo fai nel progetto B? –