【问题标题】:Set default project in solution for dotnet run在 dotnet 运行的解决方案中设置默认项目
【发布时间】:2018-03-22 08:22:44
【问题描述】:

我在它自己的文件夹中创建了一个解决方案和一个 webapi 项目。 然后我将项目添加到解决方案中。

我希望能够在不指定项目的情况下通过设置默认值来运行 dotnet run(就像我在 Visual Studio 中那样)

使用 CLI 是否可行?

【问题讨论】:

  • 也许替代方案是使用 docker-compose,只是建议,我不知道其他方式。
  • 你可以在你想运行的项目中创建一个 .bat 文件,比如 set ASPNETCORE_ENVIRONMENT=Local dotnet run

标签: .net .net-core dotnet-cli


【解决方案1】:

目前,dotnet run 无法做到这一点。

dotnet run 确实调用 msbuild 目标来执行恢复和构建,但查询实际程序和参数以从新的静态评估运行,这意味着即使您将自定义构建逻辑添加到解决方案(=>“项目“正在构建),您没有机会运行自定义 msbuild 逻辑来从其他项目中获取这些属性。 (仍然可以对构建的可执行文件的相对路径进行硬编码,但这非常麻烦且不够灵活)

这意味着最好的方法是创建 scipts (.bat, .sh) 来为您调用正确的 dotnet run -p my/project 命令,而无需您进行大量输入。

【讨论】:

    【解决方案2】:

    如果您在 *nix 系统上,Makefile 可以解决所有重复输入问题。

    我一般会创建一个高级别的Makefile 来缩短常用命令。

    build:
        dotnet build
    clean:
        dotnet clean
    restore:
        dotnet restore
    watch:
        dotnet watch --project src/Main/Main.csproj run
    start:
        dotnet run --project src/Main/Main.csproj
    

    上述命令涉及一个干净的架构设置,其中文件结构大致如下所示。

    -- root
    |-- src
    |    |-- Application
    |    |-- Core
    |    |-- Infrastructure
    |    |-- Main
    |-- tests
    |    |-- Application.IntegrationTests
    |    |-- Core.UnitTests
    |    |-- Infrastructure.UnitTests
    |-- API.sln
    |-- Makefile
    

    通过该设置,我可以运行类似的命令

    make start
    

    【讨论】:

      【解决方案3】:

      似乎还没有 dotnet 配置文件 - 很高兴看到 .dotnetconfig.json 或类似文件,否则扩展 SLN 文件以支持 dotnet 命令的默认项目。按照@MartinUllrich 的思路,假设您安装了Node.js,只需创建一个package.json 并调用npm start。同样的模式也适用于其他脚本引擎。

      package.json

      {
        "name": "dotnet-run-default-project",
        "private": true,
        "version": "1.0.0", 
        "scripts": {
          "start": "dotnet run -p .\\src\\MyApplication.Web\\"
        }
      }
      

      运行默认项目

      npm 开始

      【讨论】:

      • 这将需要安装节点,而大多数后端开发人员并非如此
      【解决方案4】:

      另一种方法是将项目文件移动到解决方案目录。然后当dotnet run 被执行时,它会检查那个目录来加载一个项目。

      之后你不需要指定--project :)

      【讨论】:

      • 不好的建议。为了一点点方便,破坏项目的结构是不可取的。这也会让新手感到困惑,并使 CI/CD 管道实现复杂化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多