22

按照https://github.com/aspnet/Home的说明在 OSX 上安装 DNVM 和 DNX 。

我使用generator-aspnet创建了一个带有一个源文件 Program.cs 的控制台应用程序:

using System;

namespace HelloWorldConsole
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            Console.ReadLine();
        }
    }
}

和一个 package.json:

{
    "version": "1.0.0-*",
    "dependencies": {},
    "commands": {
        "run": "run"
    },
    "frameworks": {
        "dnx451": {},
        "dnxcore50": {
            "dependencies": {
                "System.Console": "4.0.0-beta-*"
            }
        }
    }
}

当我使用 运行它时dnu . run,它按预期工作并打印“Hello World!”。

但是,当我尝试通过运行从中生成程序集时,dnu build出现以下错误:

System.IO.EndOfStreamException:无法读取流的结尾。
在 System.IO.BinaryReader.ReadChar () [0x00000] 在 :0 在 Microsoft.CodeAnalysis.CvtResFile.ReadStringOrID (System.IO.BinaryReader fhIn) [0x00000] 在 :0 在 Microsoft.CodeAnalysis.CvtResFile.ReadResFile (System.IO .Stream 流)[0x00000] 在:0 在 Microsoft.CodeAnalysis.Compilation.MakeWin32ResourceList(System.IO.Stream win32Resources,Microsoft.CodeAnalysis.DiagnosticBag 诊断)[0x00000] 在:0 在 Microsoft.CodeAnalysis.CSharp.CSharpCompilation.SetupWin32Resources( Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder moduleBeingBuilt,System.IO.Stream win32Resources,Microsoft.CodeAnalysis.DiagnosticBag 诊断)[0x00000] 在 Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CompileImpl 的 0 处(Microsoft.CodeAnalysis.Emit.CommonPEModuleBuilder moduleBuilder , System.IO.Stream win32Resources, System.IO。流 xmlDocStream、布尔 generateDebugInfo、Microsoft.CodeAnalysis.DiagnosticBag 诊断、System.Predicate1 filterOpt, CancellationToken cancellationToken) [0x00000] in <filename unknown>:0 at Microsoft.CodeAnalysis.Compilation.Compile (Microsoft.CodeAnalysis.Emit.CommonPEModuleBuilder moduleBuilder, System.IO.Stream win32Resources, System.IO.Stream xmlDocStream, Boolean generateDebugInfo, Microsoft.CodeAnalysis.DiagnosticBag diagnostics, System.Predicate1 filterOpt, CancellationToken cancelToken) [0x00000] in :0 at Microsoft.CodeAnalysis.Compilation.Emit (Microsoft.CodeAnalysis.EmitStreamProvider peStreamProvider, Microsoft.CodeAnalysis.EmitStreamProvider pdbStreamProvider, Microsoft.CodeAnalysis.EmitStreamProvider xmlDocumentationStreamProvider, Microsoft.CodeAnalysis.EmitStreamProvider win32ResourcesStreamProvider, IEnumerable 1 manifestResources, Microsoft.CodeAnalysis.Emit.EmitOptions options, Microsoft.CodeAnalysis.CodeGen.CompilationTestData testData, System.Func1 getHostDiagnostics, CancellationToken cancelToken) [0x00000] in :0 at Microsoft.CodeAnalysis.Compilation.Emit (System.IO.Stream peStream, System.IO.Stream pdbStream, System.IO.Stream xmlDocumentationStream, System.IO.Stream win32Resources, IEnumerable1 manifestResources, Microsoft.CodeAnalysis.Emit.EmitOptions options, Microsoft.CodeAnalysis.CodeGen.CompilationTestData testData, System.Func1 getHostDiagnostics, CancellationToken cancelToken) [0x00000] in :0 at Microsoft.CodeAnalysis.Compilation.Emit (System.IO.Stream peStream, System.IO.Stream pdbStream, System.IO.Stream xmlDocumentationStream, System.IO.Stream win32Resources, IEnumerable1 manifestResources, Microsoft.CodeAnalysis.Emit.EmitOptions options, CancellationToken cancellationToken) [0x00000] in <filename unknown>:0 at Microsoft.Framework.Runtime.Roslyn.RoslynProjectReference.EmitAssembly (System.String outputPath) [0x00000] in <filename unknown>:0 at Microsoft.Framework.PackageManager.ProjectBuilder.Build (System.String name, System.String outputPath) [0x00000] in <filename unknown>:0
at Microsoft.Framework.PackageManager.BuildContext.Build (System.Collections.Generic.List
1 诊断)[0x00000] 在 :0 在 Microsoft.Framework.PackageManager.BuildManager.Build () [0x00000] 在 :0 在 Microsoft.Framework.PackageManager.Program+<>c__DisplayClass3_4.b__8 () [0x00000] 在 :0 在 Microsoft .Framework.Runtime.Common.CommandLine.CommandLineApplication.Execute (System.String[] args) [0x00000] 在 :0 在 Microsoft.Framework.PackageManager.Program.Main (System.String[] args) [0x00000] 在 :0在 System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder 活页夹,System.Object[] 参数,System.Globalization.CultureInfo 文化)[0x00000] in :0

任何想法为什么 dnx 。运行有效,但 dnu build 无效?核心库似乎被引用和加载,因此运行正常。dnu build 命令缺少什么?

4

3 回答 3

11

我所做的是这样的:

  1. 克隆单声道存储库,按照此处的说明进行编译和安装http://www.mono-project.com/docs/compiling-mono/(确保遵循从 git 源编译的说明)
  2. 酿造水龙头 aspnet/dnx
  3. 冲泡升级
  4. brew install dnvm --without-mono

这样做之后,我能够成功运行 dnu build 。

于 2015-05-05T03:33:16.143 回答
4

这是一个已知的 Mono 错误:https ://bugzilla.xamarin.com/show_bug.cgi?id=29499

讨论在这里:https ://github.com/aspnet/Home/issues/498

于 2015-04-30T23:27:20.210 回答
4

问题似乎是 brew 指向的单声道版本似乎不适用于最新版本的 aspnet/dnx。这是一种让它指向一个可行版本的方法。

  1. 纳米 /usr/local/Library/Formula/mono.rb
  2. 将第 4 行和第 5 行更改为

    网址“ http://download.mono-project.com/sources/mono/mono-4.0.1.44.tar.bz2”sha256“eaf5bd9d19818cb89483b3c9cae2ee3569643fd621560da036f6a49f6b3e3a6f

  3. 冲泡升级单声道

  4. 您应该能够在项目上正确运行 dnu build

    • 源 dnvm.sh
    • cd 项目目录
    • dnu 恢复
    • dnu 构建
    • export MONO_MANAGED_WATCHER=false(对于单声道错误,请参见下面的链接)
    • dnx 红隼
    • 打开http://localhost:5001

关于单声道错误 -使用 VSCode、DNX 和 kestrel 运行第一个 ASP.NET 5 应用程序会导致 IOException

如果您对 brew 有问题,请使用 brew doctor

感谢 salerth https://github.com/aspnet/Home/issues/498

于 2015-06-06T05:00:24.000 回答