.NET8 中的确定性构建

问题描述 投票:0回答:1

.NET8 中的确定性构建存在问题。

我们有一个大型项目,有许多引用的库。

为了简单起见,让 lib2 被 lib1 引用。

如果lib2的源代码发生变化,那么构建项目时,我们需要lib1 dll保持不变。

.NET8 中当前的行为是,如果 lib2 的源代码发生更改,msbuild 将生成不同的 dll(这是正确的),但它也会更改 lib1 dll。

对于部署构建,我们使用 msbuild。

这是一个错误还是一个预期的解决方案?有没有办法满足我们的需求?

c# .net msbuild deterministic
1个回答
0
投票

潜在的解决方案

1。禁用源链接: 您可以在项目设置中禁用源链接。这可能有助于确保 lib2 中的更改不会影响 lib1。您可以通过修改 .csproj 文件来完成此操作: xml

<PropertyGroup>
    <EnableSourceLink>false</EnableSourceLink>
</PropertyGroup>

2。调整构建配置: 考虑更改构建配置以防止不必要的重建。例如,您可以使用条件编译符号或单独的构建配置来进行开发和部署。

3.利用程序集版本控制: 不要依赖通过通配符的自动版本控制(例如,AssemblyVersion("5.3.*")),而是在项目文件中显式设置程序集版本,以在构建期间保持对版本控制行为的控制。

4。向 Microsoft 反馈: 由于这是行为上的重大变化,因此在 GitHub 或与 .NET 相关的论坛上提供反馈可能有助于提高认识,并可能导致未来版本中的修复或改进。 结论 .NET 8 中当前关于确定性构建和依赖关系管理的行为似乎存在问题,并且可能与用户期望不符。通过禁用 Source Link 并调整构建配置,您可以在等待 Microsoft 的进一步更新时缓解一些问题。这种结构化的响应解决了核心问题,同时提供了可操作的解决方案以及对 .NET 8 构建过程中潜在变化的见解。

© www.soinside.com 2019 - 2024. All rights reserved.