我正在关注各种博客文章,介绍如何使用ASP.NET Core 1.0应用程序(以前称为ASP.NET 5),然后为Linux安装正确的.net核心运行时,因此您可以在Linux上运行,特别是在ubuntu 14.04上运行。
我已经安装了.net核心工具(dnvm和dnx),并且我有一个只是标准模板应用程序的ASP.NET应用程序,而且我创build了一个包含它的存储库,并试图在我的Ubuntu系统上运行它。 Windows上最新的.Net和Visual Studio工具是1.0.0-beta8,在我的Ubuntu机器上也是这样,它报告Mono-x64-1.0.0-beta8-15858被安装。
我将我的源代码克隆到Ubuntu系统上,并运行成功的dnu恢复。
从包含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文件夹中存在组件冲突版本或缺less某些内容,或者在我的项目源代码中存在错误?
起初,我看到另外一个奇怪的例外,我认为这个例外与dnvm的“1.0.0-rc2”版本有关,在当今的公共服务器上短暂可见,然后消失了。
一些常规设置步骤:
。
<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 useselect一个dnx版本。
确保您的用户帐户级别的dnx运行时软件包通过dnu恢复进行恢复。
??什么??
转到包含project.json的文件夹并运行dnx web
。 成功?
更新:如果我使用dnvm在ubuntu 14.04上使用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中有错误的内容时,我看到一些开发人员频道(内部未发布)构build。
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目标运行时types,这个问题就消失了。 一旦安装,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使用。 他们不是,而是我写这个date,只有最近的mono-2015.11.xx每晚构build已知的工作。 在未来的某个时候,一旦稳定的4.3.0+版本发布,你可能会使用DNX,但我不能肯定地说。
Windows上最新的.Net和Visual Studio工具是1.0.0-beta8,在我的Ubuntu机器上也是这样,它报告Mono-x64-1.0.0-beta8-15858被安装。
对我来说,你似乎没有运行相同的运行时间。
您是否尝试过运行dnvm upgrade
而无需定位夜间构建服务器? 在我看来,您的代码可能在beta8-15858
运行时使用beta8
程序集。
在你的Ubuntu机器上运行dnu feeds list
,以确保你的目标是稳定的频道,而不是开发者(应该只看到默认的提要)。
如果您的目标是错误的,您可以从位于~/.config/NuGet/Nuget.Config
下的用户文件夹中的nuget.config
文件中进行~/.config/NuGet/Nuget.Config
。
执行以下操作以确保您处于正确的运行时间:
~/.dnx/runtimes
所有现有运行~/.dnx/runtimes
dnvm upgrade
dnvm install -r coreclr latest
dnu restore
dnx web
现在应该工作 有可能在ubuntu 14.04上运行beta8单声道。 我刚刚给了它一个镜头,并取得了成功,这是我遵循的步骤;
按照这里的说明安装dnvm和libuv。
冉dnvm install 1.0.0-beta8
安装单张快照 – 最新并执行. mono-snapshot mono
. mono-snapshot mono
克隆这个新的MVC 6 beta8项目git clone https://github.com/staff0rd/TinyMvc -b beta8
Ran mozroots --import --sync
so nuget不会抛出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.
从这里执行一个空的Ubuntu 14.04。