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

如何永久阻止ClickOnce包含已排除的LibGit2Sharp相关.so文件?

解决ClickOnce发布时LibGit2Sharp.NativeBinaries平台文件顽固包含的问题

以下是几个可靠的方法,无需移除LibGit2Sharp即可彻底阻止Linux/macOS原生文件进入ClickOnce发布清单:

1. 通过NuGet引用过滤原生文件(根源解决)

直接在项目文件的PackageReference中配置ExcludeAssets,从根源阻止非Windows平台的原生二进制文件被下载和复制到输出目录:

方案A:仅保留编译所需程序集(完全排除所有原生文件)

<PackageReference Include="LibGit2Sharp" Version="你的版本号">
  <ExcludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</ExcludeAssets>
  <IncludeAssets>compile</IncludeAssets>
</PackageReference>

方案B:仅排除非Windows平台的原生文件

如果你需要保留Windows平台的原生文件,可精准排除Linux/macOS的runtime资产:

<PackageReference Include="LibGit2Sharp" Version="你的版本号">
  <ExcludeAssets>runtime.linux-*; runtime.osx-*</ExcludeAssets>
</PackageReference>

2. 自定义MSBuild目标在发布前清理文件

在项目文件中添加自定义目标,在ClickOnce生成部署清单之前彻底删除发布目录中的非Windows原生文件:

<Target Name="CleanNonWindowsNativeBinaries" BeforeTargets="GenerateDeploymentManifest">
  <!-- 删除Linux/macOS目录 -->
  <RemoveDir Directories="$(PublishDir)lib\linux-*" />
  <RemoveDir Directories="$(PublishDir)lib\osx-*" />
  <!-- 删除所有.so/.dylib及其deploy文件 -->
  <Delete Files="$(PublishDir)**\*.so" />
  <Delete Files="$(PublishDir)**\*.dylib" />
  <Delete Files="$(PublishDir)**\*.so.deploy" />
  <Delete Files="$(PublishDir)**\*.dylib.deploy" />
</Target>

这个目标会在生成清单前执行,确保这些文件不会被纳入清单。

3. 配置ClickOnce专属排除规则

使用ClickOnce的ExcludeFromDeployment属性标记需要排除的文件/目录,比单纯的Remove更直接:

<ItemGroup>
  <!-- 移除内容项标记 -->
  <Content Remove="lib\linux-**" />
  <Content Remove="lib\osx-**" />
  <Content Remove="**\*.so" />
  <Content Remove="**\*.dylib" />
  
  <None Remove="lib\linux-**" />
  <None Remove="lib\osx-**" />
  <None Remove="**\*.so" />
  <None Remove="**\*.dylib" />
  
  <!-- 标记为ClickOnce排除项 -->
  <ExcludeFromDeployment Include="lib\linux-**" />
  <ExcludeFromDeployment Include="lib\osx-**" />
  <ExcludeFromDeployment Include="**\*.so" />
  <ExcludeFromDeployment Include="**\*.dylib" />
</ItemGroup>

4. 手动指定Windows原生包(避免间接引入多平台文件)

如果项目中直接或间接引用了LibGit2Sharp.NativeBinaries包,可移除它,转而只引用Windows平台的原生包:

<PackageReference Include="LibGit2Sharp.NativeBinaries.win-x64" Version="对应版本号" />

这样NuGet只会下载Windows平台的原生文件,不会引入Linux/macOS版本。

验证步骤

  1. 清理项目的bin、obj目录
  2. 重新生成并发布,检查Application Files目录和发布清单,确认非Windows原生文件已被排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:22:23