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

Docker发布时Release构建失败:MSB4803错误

解决.NET Core 6 Blazor Server发布到Portainer的Release构建失败问题

问题现象

Debug模式下项目可正常构建运行,但切换至Release模式或执行发布操作时构建失败,核心报错:

error MSB4803: The task "ResolveComReference" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild.

完整构建输出:

------
 > [build 7/7] RUN dotnet build "Necon.csproj" -c Release -o /app/build:
#15 2.489   All projects are up-to-date for restore.
#15 3.000 /usr/share/dotnet/sdk/6.0.408/Microsoft.Common.CurrentVersion.targets(2927,5): error MSB4803: The task "ResolveComReference" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild. See https://aka.ms/msbuild/MSB4803 for further details. [/src/Necon/Necon.csproj]
#15 3.007 
#15 3.007 Build FAILED.
#15 3.007 
#15 3.007 /usr/share/dotnet/sdk/6.0.408/Microsoft.Common.CurrentVersion.targets(2927,5): error MSB4803: The task "ResolveComReference" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild. See https://aka.ms/msbuild/MSB4803 for further details. [/src/Necon/Necon.csproj]
#15 3.007     0 Warning(s)
#15 3.007     1 Error(s)
#15 3.007 
#15 3.007 Time Elapsed 00:00:01.90
------
WARNING: buildx: git was not found in the system. Current commit information was not captured by the build
Dockerfile:14

相关配置文件

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Necon/Necon.csproj", "Necon/"]
RUN dotnet restore "Necon/Necon.csproj"
COPY . .
WORKDIR "/src/Necon"
RUN dotnet build "Necon.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Necon.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Necon.dll"]

Necon.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>8ac9eb75-ec3e-42b0-b702-405a8e375b34</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <EnableSdkContainerSupport>true</EnableSdkContainerSupport>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="DecklinkPublicLib">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>0</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>1469d378-8829-4ff0-9b3b-07dd5b16f3cb</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
    <COMReference Include="BMDSwitcherAPI">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>0</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>8a92b919-156c-4d61-94ef-03f9be4004b0</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.13" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="6.0.13" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.13" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.13" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.13">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.11" />
    <PackageReference Include="MudBlazor" Version="6.1.8" />
  </ItemGroup>

</Project>

.dockerignore

**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

发布设置截图

发布设置截图

解决方案

方案1:预生成COM互操作程序集(推荐)

Linux容器的.NET Core MSBuild不支持动态解析COM引用,需提前在Windows环境生成互操作程序集:

  1. 打开Visual Studio开发者命令提示符,执行以下命令生成互操作DLL:
    tlbimp DecklinkPublicLib.tlb /out:DecklinkPublicLib.dll
    tlbimp BMDSwitcherAPI.tlb /out:BMDSwitcherAPI.dll
    
  2. 将生成的两个DLL文件添加到项目中,设置复制到输出目录为「如果较新则复制」
  3. 修改Necon.csproj,移除原有的<COMReference>节点,替换为:
    <ItemGroup>
      <Reference Include="DecklinkPublicLib">
        <HintPath>./你的文件路径/DecklinkPublicLib.dll</HintPath>
        <EmbedInteropTypes>true</EmbedInteropTypes>
      </Reference>
      <Reference Include="BMDSwitcherAPI">
        <HintPath>./你的文件路径/BMDSwitcherAPI.dll</HintPath>
        <EmbedInteropTypes>true</EmbedInteropTypes>
      </Reference>
    </ItemGroup>
    

方案2:改用Windows容器构建

如果宿主机是Windows系统,可切换到Windows容器环境构建,Dockerfile修改如下:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-nanoserver-ltsc2022 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0-nanoserver-ltsc2022 AS build
WORKDIR /src
COPY ["Necon/Necon.csproj", "Necon/"]
RUN dotnet restore "Necon/Necon.csproj"
COPY . .
WORKDIR "/src/Necon"
RUN dotnet build "Necon.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Necon.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Necon.dll"]

方案3:条件性排除Release模式的COM引用(仅适用于Debug专属场景)

若COM组件仅用于本地Debug调试,发布后无需使用,可修改Necon.csproj:

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <COMReference Include="DecklinkPublicLib">
    <WrapperTool>tlbimp</WrapperTool>
    <VersionMinor>0</VersionMinor>
    <VersionMajor>1</VersionMajor>
    <Guid>1469d378-8829-4ff0-9b3b-07dd5b16f3cb</Guid>
    <Lcid>0</Lcid>
    <Isolated>false</Isolated>
    <EmbedInteropTypes>true</EmbedInteropTypes>
  </COMReference>
  <COMReference Include="BMDSwitcherAPI">
    <WrapperTool>tlbimp</WrapperTool>
    <VersionMinor>0</VersionMinor>
    <VersionMajor>1</VersionMajor>
    <Guid>8a92b919-156c-4d61-94ef-03f9be4004b0</Guid>
    <Lcid>0</Lcid>
    <Isolated>false</Isolated>
    <EmbedInteropTypes>true</EmbedInteropTypes>
  </COMReference>
</ItemGroup>

同时代码中使用COM组件的部分需用#if DEBUG包裹,避免Release编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:07:04