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, но я не могу сказать наверняка.