O dnx web no ubuntu 14.04 lança a exceção "System.Runtime.InteropServices.Marshal" (1.0.0-beta8)

Estou seguindo várias postagens do blog que mostram como pegar um aplicativo ASP.NET Core 1.0 (anteriormente ASP.NET 5) e instalar os tempos de execução do core .net corretos para Linux, para que você possa executar no Linux, especificamente no ubuntu 14.04 lts.

Eu tenho as ferramentas principais .net (dnvm e dnx) instaladas e tenho um aplicativo ASP.NET que é apenas o aplicativo de modelo padrão, e criei um repositório que o contém e estou tentando executá-lo no meu sistema Ubuntu. As mais recentes ferramentas .Net e Visual Studio no Windows são 1.0.0-beta8, e eu tenho essa também na minha caixa do ubuntu, que informa que o Mono-x64-1.0.0-beta8-15858 está instalado.

Clonei meu código-fonte no sistema ubuntu e executei o dnu restore, que foi bem-sucedido.

Na pasta que contém project.json, eu corrodnx web e eu entendi:

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 

Isso indica que existem versões conflitantes dos componentes ou algo está faltando na minha pasta .dnx ou que algo está errado no código-fonte do meu projeto?

No começo, vi outra exceção estranha, que acho que tinha algo a ver com uma compilação "1.0.0-rc2" do dnvm que estava brevemente visível nos servidores públicos hoje e desapareceu.

Algumas etapas gerais de configuração:

Inspecione ~ / .config / NuGet / NuGet.Config, deve ser assim:

.

<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>

Verifique se os binários dnx e dnu e dnvm estão presentes e atualizados. Verifique se o libuv existe e é a versão correta. Instale tempos de execução se eles não estiverem presentes. (Verifique-os com a lista dnvm, use dnvm install para instalar.)

Clone suas fontes.

Selecione uma versão do dnx via uso do dnvm.

Verifique se os pacotes de tempo de execução do dnx no nível da conta do usuário são restaurados via dnu restore.

??O que??

Vá para a pasta que contém project.json e executednx web. Sucesso?

Atualização: Se eu usar o dnvm, use 1.0.0-beta8 no ubuntu 14.04, a falha do dnx web runtime pode serMissing method AllocHGlobal in assembly /home/user/.dnx/runtimes/dnx-mono.1.0.0-beta8/bin/System.Reflection.Metadata.dll, type System.Runtime.InteropServices.Marshal ou pode ser o System.Runtime.InteropServices.Marshall no título.

Update2: Quando eu tinha o conteúdo errado no NuGet.Config, estava vendo algumas construções de canal do desenvolvedor (internas não lançadas).

Saída atual da lista dnvm:

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

Atualização 3: Depois de instalar o tipo de tempo de execução de destino coreclr, esse problema desapareceu. Depois de instalada, a lista dnvm fica assim:

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

Atualização 4: as duas respostas abaixo contêm informações essenciais. Um erro que cometi foi assumir que as versões antigas mono-2.x incluídas nos repositórios apt-get do Ubuntu 14.04 são aceitáveis para uso do DNX. Em vez disso, na data em que escrevi isso, elas não são apenas conhecidas por compilações noturnas mono-2015.11.xx. Em algum momento no futuro, quando uma versão estável 4.3.0+ for lançada, você provavelmente a usará com o DNX, mas não posso dizer com certeza.

questionAnswers(2)

yourAnswerToTheQuestion