2017-01-30 4 views
14

Sie müssen eine JSON-Datei als Quelle zum Testen in meine .NET Core-Anwendung einbetten. Der Autor dieses Beitrags http://codeopinion.com/asp-net-core-embedded-resource/ Beispielcode zur Verfügung gestellt, die die Verwendung von var assembly = Assembly.GetExecutingAssembly(); enthalten, aber wenn ich dies versuche, bekomme ich den Fehler: Cannot resolve symbol ‘GetExecutingAssembly’ and ‘Assembly’ does not contain a definition for ‘GetExecuringAssembly’Assembly.GetExecutingAssembly() in .NET Core verfügbar?

+0

Mögliche Duplikat von [Wie verweisen Sie die ausführende Assembly in DNX Core 5.0 (ASP.NET 5)?] (Http://stackoverflow.com/questions/32856659/how-do-you-reference- die-ausführende-assembly-in-dnx-core-5-0-asp-net-5) –

Antwort

18

Es gibt keine "statische" Assembly-Klasse mehr. Stattdessen haben Sie so etwas wie

typeof(<AClassHere>).GetTypeInfo().Assembly 

zu tun Wo sollte durch den Namen einer Klasse/Art in der Baugruppe Sie laden möchten ersetzt werden.

+1

das ist der beste Weg, den ich auch kenne. aber es ist hässlich :( –

3

Nein, es ist nicht in .NET Core 1.0/1.1 verfügbar.

Allerdings, wenn ich mich richtig erinnere, wird es in .NET Core 2.0 und die netstandard2.0 zurück, die später in diesem Jahr veröffentlicht werden soll, die eine viel größere API Oberfläche und erhöht die Kompatibilität mit Bibliotheken gegen .NET geschrieben haben> = 4.5 es machen einfacher, diese nach .NETStandard 2.0/2.1 zu portieren.

Viele der API-Implementierungen werden jedoch plattformabhängig sein. Mittel, Sie können SomeAPI.GetSomething() überall aufrufen, aber wenn es auf .NET Core ausgeführt wird, kann es eine PlatformNotSupportedException werfen.

Die meisten APIs zum Scannen und Erkennen von Baugruppen sollten jedoch wieder in .NET Core/Standard 2.0 sein. Stuff um AppDomain wird immer noch fehlen, da es in .NET Core keine AppDomains gibt und Prozesse für die Isolation verwendet werden sollten.

+0

Darüber hinaus, überprüfen Sie [diesen Link für die Alternative.] (https://forums.asp.net/t/2001385.aspx?Assembly+GetExecutingAssembly+core) – Rohit416

14

Wenn Sie .NET Standard-Targeting 1.5 oder höher, können Sie eine der folgenden nennen:

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

Wenn frühere Versionen von .NET Standard-Targeting dann die typeof(SomeClass).GetTypeInfo().Assembly Methode ist der einzige Weg.

+4

@jgauffin 'System .Reflection.Assembly.GetEntryAssembly() 'ist Teil von .NET Core. Es gibt Tests dafür in' corefx': https://github.com/dotnet/corefx/blob/6317e53b89680d83747d789c354bb1acda011758/src/System.Reflection/tests/ AssemblyTests.cs # L120-L128 – Polynomial

+0

@jgauffin dotnetcore ist Teil des .NET-Standards. –

-1

Ruft das aktuelle Arbeitsverzeichnis der Anwendung ab. Nützlich für Debugging und Unit Tests.

Directory.GetCurrentDirectory();