.net 为什么不';开源项目是否对其程序集/名称空间进行版本设置?

.net 为什么不';开源项目是否对其程序集/名称空间进行版本设置?,.net,open-source,.net,Open Source,如果您使用过两个或更多开源框架,那么我相信您会遇到以下问题 Project 1 FrameWork 1 - v2.0 FrameWork 2 - v1.0 FrameWork 1 - v1.0 项目1引用了框架1和框架2,而框架2包含框架1。不幸的是,框架1的v2.0中有一个突破性的变化,而项目1需要v2.0,框架2将只适用于v1.0。由于程序集和名称空间是相同的,因此它们不能愉快地共存(除非您要求它们进入GAC) 但是,如果在构建开源框架时,名称空间和程序集名称中包含了

如果您使用过两个或更多开源框架,那么我相信您会遇到以下问题

Project 1
   FrameWork 1 - v2.0
   FrameWork 2 - v1.0
     FrameWork 1 - v1.0
项目1引用了框架1和框架2,而框架2包含框架1。不幸的是,框架1的v2.0中有一个突破性的变化,而项目1需要v2.0,框架2将只适用于v1.0。由于程序集和名称空间是相同的,因此它们不能愉快地共存(除非您要求它们进入GAC)


但是,如果在构建开源框架时,名称空间和程序集名称中包含了版本号,那么这将否定所有这些。任何数量的相同框架都可以在同一个bin文件夹/appDomain中幸福地生活在一起。当然,有一个问题是如何将其整合到开源框架中,因为这是一个手动步骤,但它将为每个使用它的人解决这个问题。不是吗?

这是一把双刃剑:

因此,总而言之,强名称程序集使用的不仅仅是简单名称来确定程序集的标识—更改其版本可以被视为完全更改其名称

参考资料


你对GAC过敏吗?@任务:GAC为部署等增加了额外的复杂性。此外,要在GAC中添加某些内容,你需要对其进行签名,这意味着编译开源框架以指定一个强名称。然后,引用其他程序集的任何强名称程序集都要求这些被引用的程序集也具有强名称,依此类推。不确定这是否比上面的更好或更简单,但这仍然适用于xcopy部署。对程序集进行签名是一项5秒钟的任务,您只需执行一次。基本安装程序可以轻松地将程序集安装到GAC中。这并不复杂。是否有理由不将框架纳入GAC?如果mscorlib和System.dll是本地程序集,您认为可以接受吗?我不认为“开源”是懒惰的借口;框架应该是GAC'ed的,应用程序应该有安装程序。您了解本地DLL的问题,您知道解决方案:只需GAC即可!(tm)