.NET8 中的确定性构建存在问题。
我们有一个大型项目,有许多引用的库。
为了简单起见,让 lib2 被 lib1 引用。
如果lib2的源代码发生变化,那么构建项目时,我们需要lib1 dll保持不变。
.NET8 中当前的行为是,如果 lib2 的源代码发生更改,msbuild 将生成不同的 dll(这是正确的),但它也会更改 lib1 dll。
对于部署构建,我们使用 msbuild。
这是一个错误还是一个预期的解决方案?有没有办法满足我们的需求?
潜在的解决方案
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 构建过程中潜在变化的见解。