是否可以从使用 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>
我使用 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>