从 .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
没有。