You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置多.NET6项目共享依赖,用dotnet watch避免文件占用?

解决多个.NET6项目同时使用dotnet watch依赖共享项目的文件占用问题

项目结构

\A.csproj(引用\Infra.csproj)
\B.csproj(引用\Infra.csproj)
\otherapp\C.csproj(引用\..\Infra.csproj)
\Infra.csproj

问题描述

我拥有多个依赖同一共享项目Infra.csproj的.NET6项目,希望同时构建并运行它们。当前通过脚本在新cmd窗口中启动dotnet watch时,出现问题:当一个项目构建共享项目后,其他项目会因文件被占用而卡住,报错信息为:

The process cannot access the file '\Infra\obj\Debug\net6.0\Infra.dll' because it is being used by another process.

解决方案

方法1:为每个依赖项目配置独立输出目录

在A.csproj、B.csproj、C.csproj这些依赖项目的配置文件中,添加独立的中间输出和最终输出目录配置,让每个项目构建时将共享项目的产物复制到自己的专属目录,避免文件竞争:

<PropertyGroup>
  <!-- 每个项目生成唯一的中间输出目录,用项目名区分 -->
  <IntermediateOutputPath>obj\Debug\net6.0\$(MSBuildProjectName)\</IntermediateOutputPath>
  <!-- 每个项目生成唯一的最终输出目录 -->
  <OutputPath>bin\Debug\net6.0\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>

方法2:预构建共享项目,禁用watch的自动构建

先手动构建一次共享项目,再启动各个项目的dotnet watch时跳过构建步骤,避免多个watch进程重复编译共享项目:

  1. 先执行共享项目的构建:
    dotnet build Infra.csproj
    
  2. 分别启动各个项目的watch:
    dotnet watch run --project A.csproj --no-restore --no-build
    dotnet watch run --project B.csproj --no-restore --no-build
    dotnet watch run --project otherapp/C.csproj --no-restore --no-build
    

注意:如果共享项目Infra.csproj有代码修改,需要重新执行第一步的构建命令,再重启各个watch进程。

方法3:启用文件锁定感知构建

在共享项目Infra.csproj中启用.NET的文件锁定感知构建特性,让构建系统自动处理文件占用问题:

<PropertyGroup>
  <EnableFileLockingSensitiveBuildOutput>true</EnableFileLockingSensitiveBuildOutput>
</PropertyGroup>

该配置会改变构建产物的生成方式,减少文件被持续锁定的概率,降低冲突发生的可能。


内容的提问来源于stack exchange,提问作者kosmos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:20:15