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

sdg*_*sdh 7 c# msbuild f# .net-core

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

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

/home/runner/my-app/App.fs
Run Code Online (Sandbox Code Playgroud)

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

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

./my-app/App.fs
Run Code Online (Sandbox Code Playgroud)

cde*_*dev 6

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

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

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

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


Dav*_*haw 5

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

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

从 DotNet SDK 存储库来看,项目文件有 2 个属性:

<Deterministic>true</Deterministic>
<DeterministicSourcePaths>true</DeterministicSourcePaths>
Run Code Online (Sandbox Code Playgroud)

您可能不需要这两个。