重定向SideBySide程序集:能否将清单文件移至私有探测目录?
.NET SideBySide程序集移至私有探测目录的可行性
可以将指定的SideBySide程序集移至privatePath配置的子目录,但清单文件的存放需要注意特定规则,具体细节如下:
一、SideBySide程序集的迁移
- 无论是托管还是非托管的SideBySide程序集,只要满足以下条件,CLR/系统就能通过私有探测路径找到它们:
- 应用清单中正确声明了对该程序集的依赖(包括版本、公钥标记、名称等信息),且与程序集本身的元数据完全匹配。
- 程序集文件(以及对应的清单文件,如果是非托管SxS程序集)直接放在
privatePath指定的子目录中,或该目录的子层级下(需确保清单中的路径声明对应)。
- 对于非托管SideBySide程序集,私有部署时无需全局注册,直接将程序集文件和其清单放在私有探测目录即可,系统会通过应用清单的声明定位到它们。
二、清单文件的存放
- 应用清单(app.manifest):推荐将其嵌入到应用的可执行文件中(在项目属性的“应用”选项卡中配置),这种方式最可靠,无需额外处理路径问题。如果使用外部清单(即独立的
[ExeName].exe.manifest文件),默认要求与可执行文件放在同一目录;若要移至私有探测目录,需通过手动修改激活上下文或使用mt.exe工具绑定清单路径,操作复杂且易出问题,不建议这么做。 - SideBySide程序集的自身清单:如果是带有独立清单的非托管程序集,必须与程序集二进制文件放在同一目录(即私有探测目录内的同一位置),否则系统无法识别程序集的身份信息。
三、排查工具推荐
如果遇到程序集加载失败的问题,可以使用fuslogvw.exe(程序集绑定日志查看器)查看详细的加载路径和失败原因,该工具能帮助快速定位路径匹配、版本不兼容等问题。
内容的提问来源于stack exchange,提问作者Peter Jaghorn
相关产品推荐
相关产品推荐

