如何告诉 dotnet watch 运行 不同的构建配置?

How to tell dotnet watch to run a different build configuration?

今天我有一个容器 运行 dotnet watch -v --project ".\MyProject" run --no-launch-profile 并且“MyProject”文件夹透明地映射到我的解决方案的 .NET Core 项目。因此,每当我更改 Visual Studio 中的文件时,它都会立即在容器内被拾取并重新编译以允许快速更改和测试。但是我注意到,当我在我的主机上构建时,这会导致冲突问题,导致 bin\Debug\netcoreapp3.1\MyProject.exe

发生冲突

为了解决这种情况,我想看看我是否可以将 argument/parameter/configuration/... 任何东西传递给 dotnet watch ,告诉它使用不同的构建配置(Debug 的副本真的但是称为 Container 以便它创建一个单独的文件夹而不与主机冲突 Visual Studio)

遗憾的是,我无法找到有关如何使用 dotnet watch 执行此操作的示例或文档。这可能吗?有更好的解决方案吗?

与其使用 dotnet watch 定位不同的构建配置,您可以通过更改基于内置 dotnet 环境变量 DOTNET_RUNNING_IN_CONTAINER.

的输出目录来解决此问题
<Project>
  <PropertyGroup Condition="'$(UsingMicrosoftNETSdk)' == 'true'">
    <DefaultItemExcludes>$(DefaultItemExcludes);$(MSBuildProjectDirectory)/obj/**/*</DefaultItemExcludes>
    <DefaultItemExcludes>$(DefaultItemExcludes);$(MSBuildProjectDirectory)/bin/**/*</DefaultItemExcludes>
  </PropertyGroup>
  <PropertyGroup Condition="'$(UsingMicrosoftNETSdk)' == 'true' AND '$(DOTNET_RUNNING_IN_CONTAINER)' == 'true'">
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/obj/container/</BaseIntermediateOutputPath>
    <BaseOutputPath>$(MSBuildProjectDirectory)/bin/container/</BaseOutputPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(UsingMicrosoftNETSdk)' == 'true' AND '$(DOTNET_RUNNING_IN_CONTAINER)' != 'true'">
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/obj/local/</BaseIntermediateOutputPath>
    <BaseOutputPath>$(MSBuildProjectDirectory)/bin/local/</BaseOutputPath>
  </PropertyGroup>
</Project>