Chciałbym parsować kwalifikowaną nazwę zespołu w .NET 3.5. W szczególności, sam zespół nie jest dostępny, to tylko nazwa. Mogę wymyślić wiele sposobów robienia tego ręcznie ręcznie, ale myślę, że może brakować niektórych funkcji do tego w bibliotekach systemowych. Jakieś sugestie?Skopiuj nazwę kwalifikowaną złożenia?
Odpowiedz
Klasa AssemblyName może przeanalizować nazwę zespołu dla ciebie, wystarczy przekazać ciąg do swojego konstruktora. Jeśli masz nazwę typu kwalifikowanego zespołu, myślę, że najpierw będziesz musiał usunąć część typu ciągu (tj. Wszystko aż do pierwszego przecinka).
Usuwanie nazwy jest zwykle bardzo skomplikowane. Rozważ nawet prostą krotkę
AssemblyName konstruktor zgłasza wyjątek FileLoadException, chyba że jest w stanie załadować zespół –
Sprawdź klasę Path. Ma kilka funkcji parsujących dla nazw plików. Albo można spróbować:
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);
Więc masz coś takiego?
Assembly assem = Assembly.LoadFile("PathToTheAssembly.dll");
Type t = assem.GetType("Namespace.And.Type.Name");
t.FullName
Jeśli szukacie analizować formę BNF powyższy przykład przy użyciu GetType powinny pracować dla Ciebie.
EDIT: Ok, to powinien robić co chcesz zakładając, że masz nazwę:
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();
}
Sam zespół nie jest dostępny, więc nie mogę wybrać Type.GetType. –
Więc tylko nazwa zespołu ciągów znaków? Czy możesz opublikować to, co faktycznie masz? – SwDevMan81
Jeśli montaż załadowany można użyć coś takiego:
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;
W powyższym przykładzie użyłem zespół wykonujący, ale przeglądasz załadowany zespół.
Aktualizacja: Zawsze można załadować zestawu w oddzielnym AppDomain uzyskać nazwę zespołu i po zakończeniu, rozładować go. Daj mi znać, jeśli potrzebujesz próbki.
No właśnie, nie mam tego zestawu pod ręką. Chciałbym przeanalizować ciąg reprezentujący jego nazwę. –
@Joannes, patrz część aktualizacji w odpowiedzi. – Vadim
Jest to implementacja parsera w Mono i BNF grammar on MSDN
Od .NET 4 i masz nowy nadpisanie dla Type.GetType:
public static Type GetType(
string typeName,
Func<AssemblyName, Assembly> assemblyResolver,
Func<Assembly, string, bool, Type> typeResolver,
bool throwOnError,
bool ignoreCase
)
Zobacz http://msdn.microsoft.com/en-us/library/ee332784%28v=vs.100%29.aspx
Co trzeba zrób to w przykładzie powyższej dokumentacji:
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
);
Możesz zastąpić powyższe lambdy bardziej złożonymi funkcjami.
- 1. JavaScript: Jak uzyskać w pełni kwalifikowaną nazwę funkcji?
- 2. Jak uzyskać kwalifikowaną nazwę z instancji typu w obszarze Dart?
- 3. Jak szybko znaleźć w pełni kwalifikowaną nazwę klasy
- 4. Uzyskaj w pełni kwalifikowaną nazwę metadanych w Roslyn
- 5. Jak mogę uzyskać typ ze złożenia załadowanego z innego folderu?
- 6. SQL Server 2008: Skopiuj plik i zmienić jego nazwę
- 7. Dopasuj nazwę pliku i skopiuj przy użyciu PowerShell
- 8. Jak uzyskać w pełni kwalifikowaną nazwę domeny w systemie Windows w Delphi
- 9. JavaScript regex, aby dopasować w pełni kwalifikowaną nazwę domeny, bez protokołu, opcjonalnie subdomeny
- 10. Skopiuj plik do folderu zasobów
- 11. Visual Studio: krok do złożenia
- 12. Język złożenia je funkcja skoku
- 13. Uwzględnij złożenia GAC w pojemniku
- 14. Zasób ze złożenia jako strumień
- 15. wywoływanie funkcji złożenia z c
- 16. Skopiuj konstruktor w pythonie?
- 17. Skopiuj zakres do schowka
- 18. Python skopiuj listę list
- 19. Skopiuj NSAttributedString do tabeli
- 20. przeciągnij i skopiuj HTML5?
- 21. skopiuj bazę danych SQL Server 2008 i zmień jej nazwę na
- 22. Używanie strzałek w celu złożenia listy krotek
- 23. Jaki jest cel węzła Złożenia w Web.Config?
- 24. Brakujące złożenia w domyślnych szablonach projektów
- 25. Wtyczka maven-assembly - jak tworzyć zagnieżdżone złożenia
- 26. Jak podsumować wektor za pomocą złożenia?
- 27. Skopiuj lokalne i systemowe biblioteki dll "- o co chodzi?
- 28. Skopiuj listę plików do katalogu
- 29. Skopiuj buforowane zdjęcie do schowka
- 30. skopiuj wszystkie nazwy metod - Intellij
Co to jest montaż? – Kieveli
Mam tutaj na myśli zestaw .NET. –