代码之家  ›  专栏  ›  技术社区  ›  osexpert

在我的runtimeconfig.json中添加“System.Reflection.Metadata.MetadataUpdater.IsSupported”:false是什么?

  •  1
  • osexpert  · 技术社区  · 3 年前

    我有一个库(dll)。出于某种原因,当我编译时,会生成文件.runtimeconfig.json:

    {
      "runtimeOptions": {
        "tfm": "net6.0",
        "frameworks": [
          {
            "name": "Microsoft.NETCore.App",
            "version": "6.0.0"
          },
          {
            "name": "Microsoft.WindowsDesktop.App",
            "version": "6.0.0"
          }
        ],
        "configProperties": {
          "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
        }
      }
    }
    

    为什么生成此文件,为什么它包含“System.Reflection.Metadata.MetadataUpdater.IsSupported”:false? 这是一个不可运行的库,那么为什么要生成.runtimeconfig.json呢?

    2 回复  |  直到 3 年前
        1
  •  0
  •   Wolfspirit    3 年前

    据我所知,运行时配置文件仅为可执行文件创建,并且告诉dotnet运行时要使用的运行时版本以及要包含的框架(例如aspnet core),因为这些框架与运行时捆绑在一起。然而,在大多数情况下,由于dotnet可执行文件都是dll文件,并且可执行文件是“启动文件”,因此您可能将两者都作为输出。

    另请参阅 https://github.com/dotnet/runtime/blob/9d6396deb02161f5ee47af72ccac52c2e1bae458/docs/design/features/sharedfx-lookup.md#framework-search-and-rolling-forward

    你的csproj是否包括 <OutputType>Exe</OutputType> 和某个地方的主干道?

    这个 System.Reflection.Metadata.MetadataUpdater.IsSupported 据我所见,告诉运行时,您正在运行的应用程序不支持元数据更新(我认为这与热重新加载有关)。在发布模式下构建应用程序时会添加此项。

        2
  •  0
  •   Angel Dinev    3 年前

    生成配置文件由csproj中的GenerateRuntimeConfigurationFiles设置控制:可能设置为 真实的 。请参阅有关生成和用途的Microsoft帮助的此部分 runtimeconfig.json 。以下是该房产的简要说明 metadataupdater.issupported 。 这里还有更详细的解释: What is the purpose of msbuild's GenerateRuntimeConfigurationFiles?