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

.NET Core 2.0+log4net应用Ubuntu运行及Windows打包报错求助

解决Ubuntu 14.04上.NET Core 2.0 + log4net 2.0.8应用的运行与跨平台打包问题

我之前也碰到过类似的跨平台部署和依赖冲突问题,结合你的情况,给你梳理几个针对性的解决思路:

一、搞定Windows下打包的NU1605包降级错误

NU1605这个错误本质是Windows环境下,针对Ubuntu 14.04的runtime进行依赖还原时,项目引用的包版本和目标runtime要求的版本不兼容,导致自动降级。直接硬引用包没用的话,可以试试这几步:

  1. 修改项目文件强制对齐runtime依赖
    打开你的.csproj文件,在<PropertyGroup>节点里添加以下配置,明确指定目标运行时并强制按runtime还原依赖:

    <RuntimeIdentifiers>ubuntu.14.04-x64;win10-x64</RuntimeIdentifiers>
    <RestoreForceRuntimeSpecific>true</RestoreForceRuntimeSpecific>
    
  2. 锁定冲突包的版本为runtime兼容版
    在<ItemGroup>里把那些提示降级的包(比如System.Runtime.Extensions、System.Runtime.InteropServices)明确指定为降级后的版本(也就是4.1.0),这样就能避免依赖解析时的自动降级冲突:

    <PackageReference Include="System.Runtime.Extensions" Version="4.1.0" />
    <PackageReference Include="System.Runtime.InteropServices" Version="4.1.0" />
    
  3. 强制针对目标runtime还原依赖
    保存项目文件后,在Windows的命令行里执行:

    dotnet restore --runtime ubuntu.14.04-x64
    

    等还原完成后再重新执行打包命令:

    dotnet publish -c Release -r ubuntu.14.04-x64
    

二、解决Ubuntu 14.04上发布后应用无法运行的问题

Ubuntu 14.04的glibc版本比较老(2.19),而.NET Core 2.0对系统库有一定要求,加上log4net的配置可能没同步到位,你可以按以下步骤排查:

  1. 安装兼容的.NET Core Runtime
    不要只装SDK,确保Ubuntu上安装了.NET Core 2.0.x的最新补丁版Runtime(比如2.0.9,对旧glibc兼容性更好),执行以下命令安装:

    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
    sudo apt-get update
    sudo apt-get install dotnet-runtime-2.0.9
    
  2. 确保log4net配置文件被正确发布
    检查你的.csproj里有没有把log4net的配置文件设置为复制到输出目录,不然发布后找不到配置文件会导致启动失败:

    <None Include="log4net.config">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    

    同时确认代码里正确加载了配置,比如在Program.cs开头加上:

    log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
    
  3. 查看详细错误日志定位问题
    如果还是启动失败,直接运行程序时加上详细日志参数:

    ./YourAppName --verbosity detailed
    

    或者查看系统日志排查:

    sudo journalctl -xe | grep YourAppName
    

三、终极方案:自包含部署

如果上面的方法都搞不定,试试打包成自包含部署包,这样会把.NET Core Runtime一起打包进去,完全不依赖系统安装的runtime,兼容性更好:
在Windows下执行打包命令:

dotnet publish -c Release -r ubuntu.14.04-x64 --self-contained true

然后把整个发布目录复制到Ubuntu 14.04上,给主程序加执行权限后运行:

chmod +x ./YourAppName
./YourAppName

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:12