在Visual Studio中,参考程序集和公共程序集有什么区别?

12

我一直在调查Visual Studio 2013中Web性能测试插件的一些问题。在添加必要的dll引用(例如Microsoft.VisualStudio.QualityTools.WebTestFramework.dll)时,我注意到在“添加引用”窗口中同一个dll有多个条目可选。在我的系统上,我有五个WebTestFramework的选择。

其中一些是我看到的较早版本的Visual Studio,也已安装在我的机器上。但是,我发现有一些是重复的,例如:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\WebTestFramework.dll

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\WebTestFramework.dll

我比较了这两个文件的哈希值,它们是相同的。那么为什么它们在我的VS 2013(v12.0)安装中出现了两次?为什么会有'ReferenceAssemblies'和'PublicAssemblies'文件夹?

1个回答

10

理想情况下,实现程序集不会出现在列表中。但是控制列表中显示内容的粒度不够细,只能按目录配置,而不能按单个程序集进行配置。另一个限制是,Microsoft通常被迫选择不太理想的存储位置来维护与之前的VS版本向后兼容性,以避免破坏现有项目。此外,测试框架已经在VS版本中发生了很大变化,花费了一些时间才将所有怪癖排除。

始终在提供引用程序集时选择它们。它们旨在使您与这些快速变化隔离开,并且通常 有意地 不是实现程序集的副本。选择实现程序集可能可以使代码工作,但存在风险,可能会在下一个VS版本中破坏您的测试项目。个人体验可能会有所不同。


我们错误地通过C#类库项目模板和单元测试项目模板添加了各种单元测试。创建类库的开发人员已经从“ReferenceAssemblies”添加了对“Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll”的引用,尽管单元测试模板是从“PublicAssemblies”添加的。这些测试在我的VS 2013中运行,但在另一个使用VS 2012的开发人员那里却无法运行。您知道这种差异的原因是否是VS版本的问题吗? - NickL
我遇到了类似的问题。尽管已安装了VS2013和.Net Framework 4.5.1,但在我的构建机器上找不到参考程序集。我正在积极解决此问题,如果我发现任何有用的信息,我会进行更新。 - DubiousPusher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接