我正在关注各种博客文章,展示如何使用ASP.NET Core 1.0应用程序(以前称为ASP.NET 5),然后为Linux安装正确的.net核心运行时,这样您就可以在Linux上运行,特别是在ubuntu 14.04上运行LTS。
我安装了.net核心工具(dnvm和dnx),我有一个ASP.NET应用程序,它只是标准模板应用程序,我创建了一个包含它的存储库,并且我试图在我的网站上运行它Ubuntu系统。 Windows上最新的.Net和Visual Studio工具是1.0.0-beta8,我也在我的ubuntu盒子上,它报告了Mono-x64-1.0.0-beta8-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文件夹中存在冲突版本的组件或缺少某些内容,或者我的项目源代码中有错误?
起初我看到了另一个奇怪的异常,我认为这与#34; 1.0.0-rc2&#34;有关。今天在公共服务器上短暂可见的dnvm的构建,然后消失了。
一些常规设置步骤:
。
<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进行安装。)
克隆您的来源。
通过使用dnvm选择dnx版本。
确保通过dnu restore恢复用户帐户级别的dnx运行时包。
??什么?
转到包含project.json的文件夹并运行dnx web
。成功?
更新:如果我在ubuntu 14.04上使用dnvm使用1.0.0-beta8,则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。
Update2:当我在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:以下两个答案都包含重要信息。我犯的一个错误是假设包含在Ubuntu 14.04的apt-get存储库中的古代mono-2.x版本可以接受DNX使用。它们不是,而是在我写这篇文章的日期,只有最近的单声道2015.11.xx夜间版本才有效。在未来的某个时候,一旦发布稳定的4.3.0+版本,您可能会使用DNX,但我无法肯定地说。
答案 0 :(得分:2)
Windows上最新的.Net和Visual Studio工具是1.0.0-beta8, 我也在我的ubuntu盒子上报告了这一点 安装了Mono-x64-1.0.0-beta8-15858。
对我而言,似乎您没有针对相同的运行时运行。
您是否尝试过运行dnvm upgrade
而不是针对夜间构建服务器?在我看来,您的代码可能正在beta8
运行时使用beta8-15858
程序集。
在您的Ubuntu框中运行dnu feeds list
以确保您定位的是稳定渠道,而不是开发人员渠道(应该只看到默认Feed)。
如果您定位错误的Feed,则可以从位于nuget.config
下的用户文件夹中的~/.config/NuGet/Nuget.Config
文件进行更改。
执行以下操作以确保您处于正确的运行时间:
~/.dnx/runtimes
dnvm upgrade
dnvm install -r coreclr latest
dnu restore
dnx web
现在应该正常工作答案 1 :(得分:1)
可以在ubuntu 14.04上针对mono运行beta8。我只是试一试并取得了成功,这是我遵循的步骤;
按照here的说明安装了dnvm和libuv。
跑dnvm install 1.0.0-beta8
已安装mono-snapshot-latest并已执行. mono-snapshot mono
克隆了这个新的MVC 6 beta8项目git clone https://github.com/staff0rd/TinyMvc -b beta8
启用mozroots --import --sync
所以nuget doesn't throw TrustFailure例外
已执行cd TinyMvc
和dnu restore
运行dnx web
;
结果:
[mono-2015.11.13+00.47.00]root@8792d900344b:/TinyMvc# dnx web
Hosting environment: Production
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
从here对空的Ubuntu 14.04执行。