VS2022构建.NET6 API Docker镜像时ContainerBuildAndLaunch任务失败
问题:VS2022构建.NET 6 Linux API容器时出现MSB4018错误
构建过程中出现以下错误:
MSB4018 The "ContainerBuildAndLaunch" task failed unexpectedly. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' user declined directory sharing
项目目标操作系统为Linux,但构建时仍尝试查找Microsoft.Win32.Registry组件,以下是项目使用的Dockerfile:
# 了解Visual Studio如何使用此Dockerfile加快调试构建镜像 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["BPBComputerGadgets.ProductsAPI/BPBComputerGadgets.ProductsAPI.csproj", "BPBComputerGadgets.ProductsAPI/"] RUN dotnet restore "BPBComputerGadgets.ProductsAPI/BPBComputerGadgets.ProductsAPI.csproj" COPY . . WORKDIR "/src/BPBComputerGadgets.ProductsAPI" RUN dotnet build "BPBComputerGadgets.ProductsAPI.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "BPBComputerGadgets.ProductsAPI.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "BPBComputerGadgets.ProductsAPI.dll"]
解决方向
- 修复Docker目录共享权限:错误提示中的"user declined directory sharing"是核心诱因。打开Docker Desktop的设置面板,进入「资源」->「文件共享」,勾选项目所在的磁盘分区并保存设置,解决本地目录与容器的共享权限问题。
- 排查依赖项中的Windows组件:右键项目打开「管理NuGet程序包」,检查是否直接或间接引用了
Microsoft.Win32.Registry包。如果是非必要依赖,直接卸载;如果是其他依赖带来的,替换为跨平台兼容的替代组件。 - 清理构建缓存:删除项目目录下的
bin和obj文件夹,同时在Docker Desktop中清理无用的镜像与缓存,重启Visual Studio后重新构建,避免缓存导致的异常依赖加载。 - 关闭VS容器快速调试模式:右键项目进入「属性」->「调试」,找到容器相关设置,关闭「快速模式」,改用完整构建模式,规避快速模式下本地文件共享的异常逻辑。
- 更新.NET 6 SDK:确保本地安装的.NET 6 SDK为最新稳定版本,旧版本可能存在跨平台容器构建的兼容性bug,更新后再尝试构建。
内容的提问来源于stack exchange,提问作者Karthikeyan VK
相关产品推荐
相关产品推荐

