我经常使用MSTest对GAC部署程序集中的代码进行单元测试。通常在我的开发机器上,我也有一个部署到GAC的代码版本。这会导致在测试代码中进行更改时出现问题,因为单元测试会继续针对GAC部署的程序集运行。
因此,要实际测试更改的代码,我必须在运行测试之前将程序集重新部署到GAC。多数民众赞成容易出错,不易使用。有没有人对如何解决这个问题有很好的解释?我认为只是在后期构建事件中运行GACUtil或类似程序并不是一个可行的解决方案,因为它可能会给开发人员造成问题......
答案 0 :(得分:4)
我建议您永远不要在开发计算机和构建服务器上将任何程序集部署到GAC中。在开发时使用本地副本用于第三方程序集或项目引用。通过这种方式,您可以确切地知道您正在构建的内容,而另一位决定从其计算机上的存储库中签出代码的开发人员将能够在不需要安装的情况下快速运行它。
只应在目标计算机上将程序集作为部署过程的一部分放入GAC中。
答案 1 :(得分:3)
我觉得这也很烦人。我的测试项目CLEARLY引用了PROJECT,而不是GAC的程序集...我不确定这是否是选择GAC而不是本地目录的CLR加载过程,或MSTest指示偏好(我假设MSTest不是处理appdomain的程序集解析事件,这会导致默认行为首先检查GAC。
我同意拥有一个单独的DEV和CI /测试服务器是理想的...但是SharePoint DOES 的开发涉及定期将程序集安装到GAC中(某些需要)案例),并强制开发人员在UNIT TESTING之前撤回/卸载代码,只是为了确保测试使用正确的程序集,有点蹩脚。
答案 2 :(得分:2)
进行更改时使用其他程序集版本
答案 3 :(得分:1)
我同意Darin,我会避免在我的开发机器上向GAC部署程序集。您的单元测试必须针对您的本地程序集运行(这就是我们称之为单元测试的原因,对吧?)。
如果要对整个应用程序或部署在计算机上的部分应用程序进行集成测试,只需编写两个gacutil调用脚本,将程序集安装到GAC,运行测试,然后清理GAC。