.net 在GAC部署的程序集中测试代码

.net 在GAC部署的程序集中测试代码,.net,unit-testing,mstest,.net,Unit Testing,Mstest,我经常使用MSTest对GAC部署程序集中的代码进行单元测试。通常在我的开发机器上,我也有一个版本的代码部署到GAC。这会导致在对测试中的代码进行更改时出现问题,因为单元测试一直针对GAC部署的程序集运行 因此,为了实际测试更改后的代码,我必须在运行测试之前将程序集重新部署到GAC。这很容易出错,而且不容易使用。有人对如何解决这个问题有很好的建议吗?我认为在后期构建事件中简单地运行GACUtil或类似的程序集并不是一个可行的解决方案,因为它可能会给其他开发人员带来问题…我建议您不要将任何程序集部

我经常使用MSTest对GAC部署程序集中的代码进行单元测试。通常在我的开发机器上,我也有一个版本的代码部署到GAC。这会导致在对测试中的代码进行更改时出现问题,因为单元测试一直针对GAC部署的程序集运行


因此,为了实际测试更改后的代码,我必须在运行测试之前将程序集重新部署到GAC。这很容易出错,而且不容易使用。有人对如何解决这个问题有很好的建议吗?我认为在后期构建事件中简单地运行GACUtil或类似的程序集并不是一个可行的解决方案,因为它可能会给其他开发人员带来问题…

我建议您不要将任何程序集部署到开发机器和构建服务器上的GAC中。开发时,将本地副本用于第三方程序集或项目引用。通过这种方式,您可以确切地知道您所针对的是什么,而另一个决定从其机器上的存储库中签出代码的开发人员将能够使其快速运行,而无需安装任何东西


作为部署过程的一部分,程序集应仅在目标计算机上放置到GAC中。

我同意Darin的观点,我会避免在我的开发人员计算机上将程序集部署到GAC中。您的单元测试必须针对本地程序集运行(这就是为什么我们称它们为单元测试,对吗?)


如果您想对部署在您机器上的整个应用程序或其部分进行集成测试,只需编写两个gacutil调用脚本,将程序集安装到GAC,运行测试,然后清理GAC。

在进行更改时使用其他程序集版本

我发现这也很烦人。我的测试项目清楚地引用了这个项目,而不是GAC'ed程序集。。。我不确定这是CLR加载进程选择GAC而不是本地目录,还是MSTest指示首选项(我假设MSTest没有处理appdomain的程序集解析事件,这会导致默认行为首先检查GAC)


我同意最好有一个单独的开发和CI/测试服务器。。。但是,SharePoint的开发确实涉及定期将程序集安装到GAC中(在某些情况下是必需的),并迫使开发人员在单元测试之前收回/卸载代码,以确保测试使用正确的程序集,这有点站不住脚。

感谢您的回复,但这并不能解决我的问题。在SharePoint项目上工作时,不能不将程序集部署到GAC。当然,除非您不想在正在运行的SharePoint上测试代码或将所有内容都放在BIN部署的程序集中。。。