dnx web в ubuntu 14.04 выдает исключение «System.Runtime.InteropServices.Marshal» (1.0.0-бета8)

Я слежу за различными сообщениями в блоге, показывающими, как взять приложение ASP.NET Core 1.0 (ранее ASP.NET 5) и затем установить правильные среды выполнения ядра .net для Linux, чтобы вы могли работать в Linux, в частности в Ubuntu 14.04 lts.

У меня установлены основные инструменты .net (dnvm и dnx), и у меня есть приложение ASP.NET, которое является просто стандартным шаблоном приложения, и я создал репозиторий, содержащий его, и пытаюсь запустить его в своей системе Ubuntu. Последним инструментарием .Net и Visual Studio для Windows является 1.0.0-бета8, и он также есть на моей коробке с Ubuntu, которая сообщает, что Mono-x64-1.0.0-бета8-15858 установлен.

Я клонировал свой исходный код в систему Ubuntu и запустил dnu restore, что удалось.

Из папки, содержащей project.json, я запускаюdnx web и я получаю это:

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 

Означает ли это, что в моей папке .dnx отсутствуют конфликтующие версии компонентов или что-то отсутствует или что в исходном коде моего проекта что-то не так?

Сначала я увидел еще одно странное исключение, которое, как мне кажется, имело какое-то отношение к сборке dnvm "1.0.0-rc2", которая сегодня была кратко видна на общедоступных серверах, а затем исчезло.

Некоторые общие шаги настройки:

Проверьте ~ / .config / NuGet / NuGet.Config, это должно быть так:

.

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

Убедитесь, что двоичные файлы dnx и dnu и dnvm присутствуют и обновлены. Убедитесь, что libuv существует и является правильной версией. Установите время выполнения, если их нет. (Проверьте их с помощью списка dnvm, для установки используйте dnvm install.)

Клонируйте ваши источники.

Выберите версию dnx через dnvm.

Убедитесь, что ваши пакеты времени выполнения dnx уровня учетной записи пользователя восстанавливаются с помощью dnu restore.

??Какие??

Перейдите в папку, содержащую project.json и запуститеdnx web, Успех?

Обновление: если я использую dnvm, использую 1.0.0-бета8 в ubuntu 14.04, ошибка во время выполнения dnx web может бытьMissing method AllocHGlobal in assembly /home/user/.dnx/runtimes/dnx-mono.1.0.0-beta8/bin/System.Reflection.Metadata.dll, type System.Runtime.InteropServices.Marshal или это может быть System.Runtime.InteropServices.Marshall в заголовке.

Обновление 2: Когда у меня было неправильное содержимое в NuGet.Config, я видел некоторые сборки канала разработчика (внутренние не выпущенные).

Текущий вывод списка 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

Обновление 3: После того, как я установил тип целевой среды coreclr, эта проблема исчезла. После установки список dnvm выглядит так:

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

Обновление 4: оба ответа ниже содержат важную информацию. Одной из моих ошибок было допущение, что древние версии mono-2.x, включенные в репозитории apt-get Ubuntu 14.04, приемлемы для использования DNX. По состоянию на дату, когда я это пишу, это не так, известно, что работают только последние ночные сборки mono-2015.11.xx. В какой-то момент в будущем, когда будет выпущена стабильная версия 4.3.0+, вы будете использовать это, возможно, с DNX, но я не могу сказать наверняка.

Ответы на вопрос(2)

Ваш ответ на вопрос