【问题标题】:Configure .netcore project as portable, but publish as selfcontained将 .net 核心项目配置为可移植,但发布为自包含
【发布时间】:2016-11-30 10:18:56
【问题描述】:

我知道可以通过 2 种不同的方式构建/发布 .NET Core 应用程序,即:便携式应用程序 ("type": "platform") 和自包含应用程序 ("type": "build")。

当我使用dotnet new 创建一个新应用程序时,默认情况下会为便携式应用程序设置project.json

"frameworks": {
    "netcoreapp1.1": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        },
        "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629"
      }
    }
  }

这意味着我的应用程序将依赖于安装在机器上的运行时,我将在其中运行应用程序。

但是,如果我决定要以便携式和独立模式发布此应用程序,该怎么办? 当我将类型设置为 build 并尝试运行应用程序时,我收到一个错误,我猜这是预期的:

C:\temp\testproj>dotnet restore && dotnet run

日志:正在为 C:\temp\testproj\project.json 恢复包...

日志:在 C:\temp\testproj\project.json 中恢复工具 'dotnet-compile-fsc' 的包...

log : 锁定文件没有改变。跳过锁定文件写入。路径:C:\temp\testproj\project.lock.json

日志:C:\temp\testproj\project.json

log : 恢复在 1973 毫秒内完成。

找不到与以下目标运行时之一兼容的框架“.NETCoreApp,Version=v1.1”的运行时目标:“win10-x64、win81-x64、win8-x64、win7-x64”。可能的原因:

  1. 项目尚未恢复或恢复失败-运行dotnet restore

  2. 该项目未在“运行时”部分列出“win10-x64、win81-x64、win8-x64、win7-x64”之一。

  3. 您可能正在尝试发布不受支持的库。使用dotnet pack 分发库。

为了让它工作,我可以设置在project.json 中添加一个runtimes 部分,这会将我当前机器的架构列为受支持的架构之一。

问题是: 有没有一种方法可以将应用程序发布为独立的和可移植的,而无需每次都更改 project.json

【问题讨论】:

    标签: .net-core


    【解决方案1】:

    您可以通过project.json 中的scripts 部分执行此操作。您有 4 个事件 - precompilepostcompileprepublishpostpublish。在脚本中你可以随心所欲(例如有两个procet.json,用dotnet publish替换和执行)

    您可以在https://docs.microsoft.com/pl-pl/dotnet/articles/core/tools/project-json#scripts 阅读有关scripts 部分的更多信息

    【讨论】:

    • 感谢您的回答。这与我想象的解决方案略有不同。我可以通过将这种逻辑添加到构建脚本来实现相同的行为。我虽然有一种方法没有两个不同的 project.json 文件。
    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2016-04-10
    • 1970-01-01
    • 2017-03-02
    • 2020-09-08
    相关资源
    最近更新 更多