2017-01-30 27 views
14

Potrzeba osadzenia pliku json jako źródła do testowania w mojej aplikacji .NET Core. Autor tego wpisu pod numerem http://codeopinion.com/asp-net-core-embedded-resource/ podał przykładowy kod, który obejmował użycie var assembly = Assembly.GetExecutingAssembly();. Jednak gdy spróbuję, otrzymuję komunikat o błędzie: Cannot resolve symbol ‘GetExecutingAssembly’ and ‘Assembly’ does not contain a definition for ‘GetExecuringAssembly’Assembly.GetExecutingAssembly() dostępne w .NET Core?

+0

Możliwy duplikat [W jaki sposób można odwołać zespołu wykonującego DNX Rdzenia ASP.NET 5.0 (5)?] (Http://stackoverflow.com/questions/32856659/how-do-you-reference- wykonujący-montaż-w-dnx-core-5-0-asp-net-5) –

Odpowiedz

18

Nie ma już "statycznej" klasy Assembly. Zamiast tego musisz zrobić coś takiego, jak:

Gdzie należy zamienić nazwę klasy/typu w zespole, który chcesz załadować.

+1

to najlepszy sposób, jaki znam. ale jest brzydki :( –

3

Nie, nie jest dostępny w .NET Core 1.0/1.1. Jednak, jeśli dobrze pamiętam, będzie to ponownie w .NET Core 2.0 i netstandard2.0, która ma zostać wydana później w tym roku, która będzie miała znacznie większą powierzchnię interfejsu API i zwiększoną kompatybilność z bibliotekami napisanymi dla .NET> = 4.5 czyniąc go łatwiej je przenieść do .NETStandard 2.0/2.1.

Jednak wiele implementacji API będzie zależnych od platformy. Znaczy, będziesz mógł zadzwonić pod numer SomeAPI.GetSomething() wszędzie, ale jeśli uruchomisz .NET Core, może on rzucić PlatformNotSupportedException.

Jednak większość interfejsów API dotyczących skanowania i odkrywania złożenia powinna wrócić do .NET Core/Standard 2.0. Wciąż będzie brakować rzeczy o numerze AppDomain, ponieważ w .NET Core nie ma AppDomains, a procesy powinny być używane do izolacji.

+0

Oprócz tego sprawdź [ten link alternatywny.] (https://forums.asp.net/t/2001385.aspx?Assembly+GetExecutingAssembly+core) – Rohit416

14

Jeśli kierowanie .NET 1.5 lub nowszy standard, można nazwać jedną z następujących czynności:

System.Reflection.Assembly.GetExecutingAssembly(); 
System.Reflection.Assembly.GetEntryAssembly(); 
System.Reflection.Assembly.GetCallingAssembly(); 

Jeśli kierowania wcześniejsze wersje .NET Standardu wówczas metoda typeof(SomeClass).GetTypeInfo().Assembly jest jedynym sposobem.

+4

@jgauffin 'System .Reflection.Assembly.GetEntryAssembly() 'jest częścią .NET Core.Istnieje testy dla niego w' corefx': https://github.com/dotnet/corefx/blob/6317e53b89680d83747d789c354bb1acda011758/src/System.Reflection/tests/ AssemblyTests.cs # L120-L128 – Polynomial

+0

@jgauffin dotnetcore jest częścią standardu .NET. –

-1

Pobiera bieżący katalog roboczy aplikacji. Przydatny do debugowania i testów jednostkowych.

Directory.GetCurrentDirectory();