dnx web unter Ubuntu 14.04 löst die Ausnahme "System.Runtime.InteropServices.Marshal" (1.0.0-beta8) aus

Ich verfolge verschiedene Blog-Posts, in denen gezeigt wird, wie eine ASP.NET Core 1.0-Anwendung (früher ASP.NET 5) verwendet und dann die korrekten .net Core-Laufzeiten für Linux installiert werden, damit Sie unter Linux, insbesondere unter Ubuntu 14.04, ausgeführt werden können.

Ich habe die .net-Kerntools (dnvm und dnx) installiert, und ich habe eine ASP.NET-Anwendung, die nur die Standardvorlagenanwendung ist, und ich habe ein Repository erstellt, das sie enthält, und ich versuche, sie auf meinem Ubuntu-System auszuführen . Das neueste .NET- und Visual Studio-Tool unter Windows ist 1.0.0-beta8, und das habe ich auch auf meiner Ubuntu-Box, die meldet, dass Mono-x64-1.0.0-beta8-15858 installiert ist.

Ich habe meinen Quellcode auf das Ubuntu-System geklont und dnu restore ausgeführt, was erfolgreich war.

Von dem Ordner mit project.json starte ichdnx web und ich bekomme das:

Application startup exception: System.TypeLoadException: Could not load type 'System.Runtime.InteropServices.Marshal' from assembly 'System.Reflection.Metadata'.
  at System.Reflection.Internal.StreamMemoryBlockProvider.ReadMemoryBlockNoLock (System.IO.Stream stream, Boolean isFileStream, Int64 start, Int32 size) [0x00000] in <filename unknown>:0 
  at System.Reflection.PortableExecutable.PEReader..ctor (System.IO.Stream peStream, PEStreamOptions options, Nullable`1 sizeOpt) [0x00000] in <filename unknown>:0 
  at System.Reflection.PortableExecutable.PEReader..ctor (System.IO.Stream peStream, PEStreamOptions options) [0x00000] in <filename unknown>:0 
  at Microsoft.CodeAnalysis.ModuleMetadata.CreateFromStream (System.IO.Stream peStream, PEStreamOptions options) [0x00000] in <filename unknown>:0 
  at Microsoft.Dnx.Compilation.CSharp.MetadataReferenceExtensions.CreateAssemblyMetadata (IMetadataFileReference fileReference) [0x00000] in <filename unknown>:0 
  at Microsoft.Dnx.Compilation.CSharp.RoslynCompiler+<>c__DisplayClass8_0.<.ctor>b__1 (Microsoft.Dnx.Compilation.Caching.CacheContext ctx) [0x00000] in <filename unknown>:0 
  at Microsoft.Dnx.Compilation.Caching.CacheExtensions+<>c__DisplayClass0_0`1[Microsoft.CodeAnalysis.AssemblyMetadata].<Get>b__0 (Microsoft.Dnx.Compilation.Caching.CacheContext ctx) [0x00000] in <filename unknown>:0 
  at Microsoft.Dnx.Compilation.Caching.Cache.CreateEntry (System.Object k, System.Func`2 acquire) [0x00000] in <filename unknown>:0 
  at Microsoft.Dnx.Compilation.Caching.Cache+<>c__DisplayClass5_0.<AddEntry>b__0 () [0x00000] in <filename unknown>:0 
  at System.Lazy`1[Microsoft.Dnx.Compilation.Caching.Cache+CacheEntry].InitValue () [0x00000] in <filename unknown>:0 

Ist dies ein Hinweis darauf, dass in meinem .dnx-Ordner widersprüchliche Versionen von Komponenten vorhanden sind oder etwas fehlt oder dass in meinem Projektquellcode etwas nicht stimmt?

Zuerst sah ich eine andere seltsame Ausnahme, die meiner Meinung nach etwas mit einem "1.0.0-rc2" Build von dnvm zu tun hatte, der heute auf öffentlichen Servern kurz sichtbar war und dann verschwand.

Einige allgemeine Einrichtungsschritte:

Inspect ~ / .config / NuGet / NuGet.Config sollte so aussehen:

.

<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetbeta8/api/v2/" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
  <disabledPackageSources />
</configuration>

Stellen Sie sicher, dass die Binärdateien dnx und dnu und dnvm vorhanden und auf dem neuesten Stand sind. Stellen Sie sicher, dass libuv existiert und die richtige Version ist. Installieren Sie Laufzeiten, wenn diese nicht vorhanden sind. (Überprüfen Sie sie mit der dnvm-Liste und installieren Sie sie mit dnvm install.)

Klonen Sie Ihre Quellen.

Wählen Sie eine dnx-Version über dnvm.

Stellen Sie sicher, dass Ihre dnx-Laufzeitpakete auf Benutzerkontoebene über dnu restore wiederhergestellt werden.

??Was?

Gehen Sie in den Ordner mit project.json und führen Sie @ adnx web. Erfolg

Update: Wenn ich dnvm benutze, benutze ich 1.0.0-beta8 unter Ubuntu 14.04, kann der dnx-Web-Laufzeitfehler @ seiMissing method AllocHGlobal in assembly /home/user/.dnx/runtimes/dnx-mono.1.0.0-beta8/bin/System.Reflection.Metadata.dll, type System.Runtime.InteropServices.Marshal oder es kann das System.Runtime.InteropServices.Marshall im Titel sein.

Update2: Als ich die falschen Inhalte in NuGet.Config hatte, sah ich einige Builds für Entwicklerkanäle (interne unveröffentlichte).

Aktuelle Ausgabe der DNVM-Liste:

me@mabox:~$ dnvm list

Active Version              Runtime Architecture OperatingSystem Alias
------ -------              ------- ------------ --------------- -----
       1.0.0-beta7          mono                 linux/osx
  *    1.0.0-beta8          mono                 linux/osx       default

Update 3: Nach der Installation von coreclr target runtime type ist dieses Problem behoben. Nach der Installation sieht die DNVM-Liste folgendermaßen aus:

Active Version              Runtime Architecture OperatingSystem Alias
------ -------              ------- ------------ --------------- -----
  *    1.0.0-beta8          coreclr x64          linux
       1.0.0-beta8          mono                 linux/osx       default

Update 4: Beide Antworten enthalten wichtige Informationen. Ein Fehler, den ich gemacht habe, war anzunehmen, dass die alten Mono-2.x-Versionen, die in den apt-get-Repos von Ubuntu 14.04 enthalten sind, für die DNX-Nutzung akzeptabel sind. Es ist nicht bekannt, dass stattdessen ab dem Datum, an dem ich dies schreibe, nur die neuesten nächtlichen Builds vom Mono-2015.11.xx funktionieren. Irgendwann in der Zukunft, wenn eine stabile Version 4.3.0+ veröffentlicht wird, würden Sie das wahrscheinlich mit DNX verwenden, aber ich kann nicht sicher sagen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage