You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何发布不含Microsoft DLL的.NET Core 2 API项目?

如何发布不包含.NET Core框架Microsoft DLL的.NET Core 2 API项目

Got it, let's work through how to publish your .NET Core 2 API so it doesn't include those Microsoft framework DLLs. First, we need to draw a clear line between two types of Microsoft DLLs you're seeing:

  • .NET Core Runtime框架DLL: 这类是.NET Core 2.x官方运行时的一部分(比如Microsoft.AspNetCore.Antiforgery.dllMicrosoft.AspNetCore.Authentication.Abstractions.dll),我们可以完全避免打包它们。
  • NuGet引入的Microsoft类库: 像Microsoft.ApplicationInsights.AspNetCore.dlllog4net.dll这类是你添加到项目的包,如果代码用到了它们的功能,就需要保留,除非移除对应的引用。

以下是具体解决步骤:

1. 使用框架依赖部署(FDD)模式

.NET Core的框架依赖部署模式假设目标服务器已经安装了.NET Core 2.x运行时,因此不需要打包运行时自带的框架DLL。

执行发布命令时明确指定框架依赖模式(虽然.NET Core 2中默认就是这个模式,但显式指定更保险):

dotnet publish -c Release -f netcoreapp2.x -o build --self-contained false
  • netcoreapp2.x替换成你项目实际使用的目标框架版本(2.0、2.1或2.2)
  • -c Release确保发布的是经过优化的生产环境代码
  • --self-contained false告诉CLI不要打包整个运行时

2. 检查项目.csproj配置

打开项目的.csproj文件,确保没有强制开启独立部署的配置:

<PropertyGroup>
  <!-- 确保这项设为false(或者不写,默认就是false) -->
  <SelfContained>false</SelfContained>
  <!-- 对于ASP.NET Core项目,保持这项启用(默认启用),它会帮助识别哪些是框架组件 -->
  <PublishWithAspNetCoreTargetManifest>true</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>

如果看到<SelfContained>true</SelfContained>,改成false后再执行发布。

3. 处理NuGet引入的Microsoft类库

你列出的Microsoft.ApplicationInsights.*log4net.dll这类文件来自你引用的NuGet包,它们不属于核心运行时,所以会被包含在发布目录中。如果想移除它们:

  • 从项目中卸载对应的NuGet包(比如如果不需要遥测功能,就移除Microsoft.ApplicationInsights.AspNetCore
  • 更新代码,确保没有使用这些库的功能,避免编译错误

4. 验证发布结果

发布完成后,查看build目录,你应该只会看到:

  • 项目主DLL(比如KalturaClient.Net.Core.dll
  • 非框架的NuGet依赖DLL(如果保留了引用的话)
  • 本地化资源文件夹(dees等,如果不需要可以通过项目配置排除)
  • 配置文件(比如log4net.config

而.NET Core核心框架的DLL不会再出现在目录中——它们会从目标服务器上安装的运行时加载。

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

火山引擎 最新活动