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

Ubuntu下msbuild构建.NET4.8 Web项目后mono运行无入口点问题

核心报错原因

你碰到的<dll_name.dll> doesn't have an entry point报错和运行方式错误直接相关:基于.NET Framework 4.8的ASP.NET Web应用(MVC/Web Forms/传统Web API)编译后生成的是类库文件,不是带Main()入口方法的可执行程序集,不管是bin目录下的正式编译dll,还是obj/Debug下的编译中间产物,都不能直接用mono xxx.dll命令启动。

正确运行方案

1. 用ASP.NET宿主启动站点,不要直接运行项目dll

Linux环境下Mono生态提供了对应.NET 4.x的ASP.NET专用宿主xsp4,操作步骤如下:

  • 先确认环境安装了mono-xsp4组件,Ubuntu源内的完整mono环境一般自带该组件,缺失的话直接通过apt安装即可
  • 终端切换到项目根目录(即存放Web.config、Global.asax、Views文件夹、Content静态资源文件夹的目录,不要切到bin目录)
  • 执行命令xsp4 --port 自定义端口号,比如用8080端口就跑xsp4 --port 8080
  • 启动完成后直接访问http://localhost:端口号即可正常访问站点,宿主会自动加载bin目录下的程序集、读取配置、定位视图文件

2. 跳过手动csc编译的无效操作

你直接执行csc StartUp.cs提示缺失命名空间是正常现象,不需要手动逐个补全程序集引用:既然msbuild已经能返回0错误完成构建,说明所有依赖、引用配置都正确,msbuild会自动处理系统程序集、项目引用、NuGet包的加载逻辑,直接用msbuild产出的bin目录文件即可,不需要手动调用csc编译单个文件。

3. 配置MonoDevelop调用新版Mono

异步返回视图报错的问题是旧版Mono的已知bug,按以下步骤给MonoDevelop指定已合并修复的新版Mono即可:

  • 先在终端执行which mono确认新版Mono的安装路径,再执行mono --version确认版本号符合预期
  • 打开MonoDevelop,依次进入顶部菜单「编辑 > 首选项 > 项目 > .NET运行时」
  • 点击「添加」按钮,选择新版Mono的安装根目录(即bin文件夹的上一级目录,官方源安装的一般是/usr,源码编译安装的一般是/usr/local)
  • 添加完成后在运行时列表选中刚添加的新版Mono,点击「设为默认」
  • 重启MonoDevelop后重新加载项目,后续构建、运行都会调用新版Mono,异步视图相关的报错会直接消失
排查注意点
  • obj目录下的所有文件都是编译过程生成的临时中间产物,没有运行、部署价值,所有运行、部署操作只需要关注bin目录的正式产出
  • .NET Framework 4.8 属于Windows原生框架,确实无法通过跨平台的新版dotnet(.NET Core/.NET 5+)命令行运行,Mono+xsp4是当前Ubuntu环境下的适配方案
  • 如果启动xsp4后仍然提示找不到视图,优先检查执行xsp4命令的工作目录是否为项目根目录,确认Views文件夹、Web.config文件在当前工作路径下,且bin目录内的dll文件完整无缺失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:09:18