是否可以从使用 dotnet build 创建的 .NET 程序集中删除完整路径?

Is it possible to remove the full-paths from .NET assemblies created with dotnet build?

我使用 dotnet build 构建我的项目,目标是 netcoreapp3.1

问题是程序集包含源文件的完整路径:

/home/runner/my-app/App.fs

这意味着程序集的哈希值取决于构建代码的目录。我希望它只依赖于源文件的哈希值和 .NET SDK 本身。

有没有办法让dotnet build像这样使用相对路径?

./my-app/App.fs

C# 编译器 (csc) 有一个编译器开关 -deterministic

F# 编译器 (fsc) 似乎有一个开关 --deterministic+

通过查看 DotNet SDK 存储库,项目文件似乎有 2 个属性:

<Deterministic>true</Deterministic>
<DeterministicSourcePaths>true</DeterministicSourcePaths>

你可能不需要这两个。

您可以使用较少的信息配置发布版本,或者您可以覆盖 PathMap 值来覆盖它。

<PropertyGroup Label="Override Stack trace file locations">
  <PathMap>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))=./</PathMap>
</PropertyGroup>

项目根目录中的以下 Directory.Build.props 应该有效:

<Project>
 <PropertyGroup>
    <Deterministic>true</Deterministic>
    <DeterministicSourcePaths>true</DeterministicSourcePaths>
    <PathMap>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))=./</PathMap>
 </PropertyGroup>
</Project>