在 Windows 上通过符号链接解析程序集加载目录

从 .NET 9 开始,.NET 主机在 Windows 上运行时,会在确定程序集加载目录之前解析符号链接。

引入的版本

.NET 9

以前的行为

在计算加载路径之前,.NET 主机未解析符号链接。 程序集加载是相对于符号链接本身而不是链接目标来解析的。

例如,如果应用程序布局如下:

/myapp/
  myapp.exe
  myapp.dll

另一个目录中创建了符号链接:

otherdir/
  myapp.exe -> /myapp/myapp.exe

执行 otherdir/myapp.exe 将解析相对于 otherdir/ 而非相对于 /myapp/ 的加载。

新行为

在确定程序集加载目录之前,.NET 主机现在解析符号链接的目标。 程序集加载是相对于主机文件的解析位置进行解析的。

使用相同的示例:

/myapp/
  myapp.exe
  myapp.dll

使用符号链接:

otherdir/
  myapp.exe -> /myapp/myapp.exe

执行 otherdir/myapp.exe 会解析相对于 /myapp/ 的加载。 otherdir/ 中的文件不被考虑。

破坏性变更的类型

这是行为 变化

更改原因

Windows 上的先前行为没有记录,与非 Windows 实现不一致,并且阻止以支持的方式使用指向 .NET 主机的符号链接。 此更改可确保一致的行为,并支持正确使用指向 .NET 主机的符号链接的方案。

如果应用程序依赖于以前的行为,请确保所有相关二进制文件位于符号链接后面的目录中,而不是位于它旁边。 避免构造依赖于符号链接位置的文件布局。

受影响的 API

没有。