Vorrei analizzare un nome qualificato dell'assembly in .NET 3.5. In particolare, l'assembly non è disponibile, è solo il nome. Posso pensare a molti modi di farlo a mano ma suppongo che potrebbe mancare qualche funzione per farlo nelle librerie di sistema. Qualche suggerimento?Nome qualificato dell'assemblaggio di analisi?
risposta
La classe AssemblyName può analizzare il nome dell'assembly per voi, basta passare la stringa al suo costruttore. Se si dispone di un nome di tipo qualificato dell'assieme, penso che sarà necessario prima rimuovere la parte del tipo della stringa (cioè tutto fino alla prima virgola).
Spogliare il nome è solitamente molto complesso. Prendi in considerazione anche la semplice Tupla
Il costruttore AssemblyName genera FileLoadException a meno che non sia in grado di caricare l'assembly –
Scopri la classe Path. Ha un sacco di funzioni di analisi per i nomi dei file. Oppure si potrebbe provare:
string qualType = @"System.String, mscorlib, Version=2.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089";
Type t = Type.GetType(qualType, false);
if (t == null)
{
Console.WriteLine("Invalid qualified type string.");
return;
}
Console.WriteLine(t.FullName);
in modo da avere qualcosa di simile?
Assembly assem = Assembly.LoadFile("PathToTheAssembly.dll");
Type t = assem.GetType("Namespace.And.Type.Name");
t.FullName
Se siete alla ricerca per analizzare la forma BNF, l'esempio precedente utilizzando GetType dovrebbe funzionare per voi.
EDIT: Ok, questo dovrebbe fare quello che vuoi a patto di avere il nome:
Assembly assem = Assembly.GetAssembly(Type.GetType(assembly_qualified_name, false));
if(assem != null)
{
byte[] pkt = assem.GetName().GetPublicKeyToken();
Version ver = assem.GetName().Version;
CultureInfo ci = assem.GetName().CultureInfo();
}
L'assembly non è disponibile, quindi non posso andare su Type.GetType. –
Quindi, solo il nome dell'assieme di stringhe? Puoi pubblicare ciò che effettivamente hai? – SwDevMan81
Se il montaggio caricata si può usare qualcosa di simile:
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;
Nell'esempio precedente ho usato un assembly in esecuzione ma si esegue il looping del gruppo caricato.
Aggiornamento: È sempre possibile caricare un assembly in un dominio di applicazione separata ottenere il nome di montaggio e dopo aver terminato, scaricarlo. Fammi sapere se hai bisogno di un campione.
Beh, appunto, non ho l'assemblea a portata di mano. Vorrei analizzare la stringa che rappresenta il suo nome. –
@Joannes, vedere aggiornamento parte nella risposta. – Vadim
C'è un'implementazione parser in Mono e BNF grammar on MSDN
Da .Net 4 e si dispone di una nuova override per Type.GetType:
public static Type GetType(
string typeName,
Func<AssemblyName, Assembly> assemblyResolver,
Func<Assembly, string, bool, Type> typeResolver,
bool throwOnError,
bool ignoreCase
)
Vedi http://msdn.microsoft.com/en-us/library/ee332784%28v=vs.100%29.aspx
Che cosa è necessario fare è nell'esempio della documentazione di cui sopra:
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
È possibile sostituire i lambda precedenti con funzioni più complesse.
- 1. cast errore xml illegale carattere nome qualificato
- 2. Come scrivere il nome qualificato di un simbolo in Haskell?
- 3. Errore: non è consentito un nome qualificato di classe
- 4. Fare un namespace nome di funzione qualificato in una macro
- 5. Libreria di analisi nome Java?
- 6. C++ 11 Accesso agli enumeratori senza ambito con nome qualificato
- 7. Nome qualificato nella dichiarazione dello spazio dei nomi
- 8. Errore macro ClojureScript: "Non è possibile definire il nome qualificato?"
- 9. Hibernate Tools: errore di nome JNDI analisi
- 10. Tipo di riferimento con namespace parzialmente qualificato
- 11. const riferimento funzione di membro qualificato
- 12. Ignorando la versione in un nome di catena di montaggio qualificato passato a Type.GetType()
- 13. errore di C++: atteso non qualificato-id
- 14. Previsto id non qualificato prima di '[' token
- 15. : atteso id non qualificato prima di 'if'
- 16. Come Type.GetType funziona quando viene fornito un nome di tipo parzialmente qualificato?
- 17. Definizione di una funzione in una macro: impossibile utilizzare il nome qualificato come parametro
- 18. Analisi di un'espressione Linq
- 19. comportamenti differenti tra Clang e GCC quando si esegue la ricerca del nome qualificato
- 20. Cosa significa "qualificato questo" in java?
- 21. qualificato-id per funzione base tramite puntatore
- 22. Cosa significa "cv-non qualificato" in C++?
- 23. g ++ atteso non qualificato-id prima '(' token
- 24. errore: atteso non qualificato-id, prima ‘per’
- 25. Analisi XML: riga 1, carattere 23, carattere nome non valido
- 26. Come far capire al cliente l'importanza di un DBA qualificato?
- 27. C# - errore di analisi fallito?
- 28. Errore di analisi HTML
- 29. Errore di analisi JSON
- 30. Analisi di una stringa
Cos'è un assemblaggio? – Kieveli
Mi riferisco agli assembly .NET qui. –