我无法在 Ubuntu 下编译使用 microsoft.extensions.configuration.configurationbuilder json api 和 mono mcs 的 C# 应用程序

问题描述 投票:0回答:1

我正在尝试编译一个简单的示例代码片段,可以在这里找到:但是我没有运气让它编译没有错误。

首先,我将网站上的代码片段包装成这样的主函数:

using System;
using Microsoft.Extensions.Configuration;

internal class Program
{
  static void Main(string[] args)
  {
    IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile(".\appsettings.json", false, true);
    IConfigurationRoot root = builder.Build();

    Console.WriteLine($"Hello, { root["weather"] } world!");
  }
}

我的构建脚本:

#!/bin/bash
mcs monotest.cs \
-r:/usr/lib/dotnet/sdk/8.0.103/Microsoft.Extensions.Configuration.dll \
-r:/usr/lib/dotnet/shared/Microsoft.AspNetCore.App/8.0.3/Microsoft.Extensions.Configuration.Abstractions.dll

但是,我仍然收到以下错误:

monotest.cs(10,41): error CS0012: The type System.Object is defined in an assembly that is not referenced. Consider adding a reference to assembly System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(在粘贴到此处之前,错误消息中的多余引号已被删除。)

我在 /usr/lib 中搜索“System.Runtime”,发现了该文件名的几个不同实例:

$ find /usr/lib -name "System.Runtime.dll"
/usr/lib/dotnet/sdk/8.0.103/Microsoft/Microsoft.NET.Build.Extensions/net461/lib/System.Runtime.dll
/usr/lib/dotnet/shared/Microsoft.NETCore.App/8.0.3/System.Runtime.dll
/usr/lib/dotnet/packs/Microsoft.NETCore.App.Runtime.ubuntu.22.04-x64/8.0.3/runtimes/ubuntu.22.04-x64/lib/net8.0/System.Runtime.dll
/usr/lib/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.dll
/usr/lib/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.3/ref/net8.0/System.Runtime.dll
/usr/lib/mono/4.5-api/Facades/System.Runtime.dll
/usr/lib/mono/4.7.1-api/Facades/System.Runtime.dll
/usr/lib/mono/4.6.1-api/Facades/System.Runtime.dll
/usr/lib/mono/4.7-api/Facades/System.Runtime.dll
/usr/lib/mono/4.6.2-api/Facades/System.Runtime.dll
/usr/lib/mono/4.5.1-api/Facades/System.Runtime.dll
/usr/lib/mono/4.5.2-api/Facades/System.Runtime.dll
/usr/lib/mono/4.6-api/Facades/System.Runtime.dll
/usr/lib/mono/4.5/Facades/System.Runtime.dll
/usr/lib/mono/4.8-api/Facades/System.Runtime.dll
/usr/lib/mono/4.7.2-api/Facades/System.Runtime.dll

我不知道将其中哪一个添加到我的脚本中。我尝试了其中一些,但它们只会导致更多错误,例如:

error CS1070: The type System.Object has been forwarded to an assembly that is not referenced. Consider adding a reference to assembly System.Private.CoreLib... etc.

也许我需要更多这些以及正确的组合,但我希望有人会知道答案,这样我就不必全部尝试。

我只是想知道是否有其他人尝试过这样的事情。

我的操作系统:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:  Ubuntu 22.04.4 LTS
Release:  22.04
Codename: jammy

单声道版本:

$ mono --version
Mono JIT compiler version 6.8.0.105 (Debian 6.8.0.105+dfsg-3.2 Wed Jun 30 05:34:49 UTC 2021)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
  TLS:           __thread
  SIGSEGV:       altstack
  Notifications: epoll
  Architecture:  amd64
  Disabled:      none
  Misc:          softdebug
  Interpreter:   yes
  LLVM:          supported, not enabled.
  Suspend:       hybrid
  GC:            sgen (concurrent by default)

顺便说一句,如果有人想问“你想做什么”,答案是:没什么具体的,我只是想学点东西。我在学习网站上看到了一些与此类似的代码,但我不想经历注册 Microsoft 帐户的麻烦,这样我就可以下载 Visual Studio Community Edition 并在我的 Windows 机器上运行它。

提前致谢!

c# .net ubuntu mono mcs
1个回答
0
投票

除非有任何进一步的信息,我相信正确的答案是:“Mono 不被维护......使用 VS Code。请参阅原始问题后面的评论。”切换到不同的框架解决了我的问题。感谢@Lex Li 给我指明了正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.