我有几个解决方案,每个解决方案都包含多个项目,所有这些解决方案都需要引用一个程序集,比如lib.dll。
这包含需要在所有解决方案之间访问的常见类和功能;我无法将所有项目都纳入一个解决方案,因为我的经理希望能够在不同的解决方案之间使用不同版本的lib.dll。我目前也被困在VSS和2005上(同情票?)。
目前,我不得不手动重做解决方案中所有项目的引用;我真正希望能够做的就是将所有东西放在一个地方,但很明显GAC就是为了这个。
有没有办法让我有一个虚拟项目,可以被特定解决方案中的所有其他项目引用,当引用时,它将提供lib.dll?
我在这里咆哮错误的树吗?
答案 0 :(得分:1)
项目文件只是XML文档,因此在脚本中解析(IronPython在这里是一个不错的选择),检查是否有引用,并根据需要插入或更新应该是一个相对微不足道的事情来实现。
答案 1 :(得分:0)
即使你创建了一个引用lib.dll(比如project.dll)的虚拟项目,你仍然需要在解决方案的所有其他项目中添加那个 dll的引用,所以你处于相同的情况,只是使用不同的装配。
另一个注意事项,如果将来会有不同的lib.dll版本,并且不同的项目会引用该dll的不同版本,那么你甚至不会想要做你做的事情我正在描述,因为你只会引用一个版本的dll,无论如何都是错误的。
我通常做的是整合框架或库,将它们保存在一个公共文件夹中并从那里引用它们(比如References文件夹或其他东西)。我也有我的团队模仿相同的文件夹结构。我们已经检查了我们的存储库,并且一切都很好地引用了。如果我们需要更改dll,那么我们只需检查文件,覆盖它,重新检入,然后重建解决方案。
答案 2 :(得分:0)
GAC应该仍然有效。您可以在GAC中拥有同一DLL的多个版本。
答案 3 :(得分:0)
首先,选择可以在源树中部署DLL的已知位置。将自定义生成步骤添加到共享库,以将生成结果复制到该已知目录(使用相对路径)。然后,在添加对共享库的引用时,在该已知位置引用它(验证引用的提示路径使用vcproj文件中的相对路径)。
我使用相对路径,因此共享位置在源代码树中进入源代码控制...如果有人从源代码控制中获取相同的树,它将按预期工作。作为替代方案,每个计算机可能有一个指向共享路径的环境变量。这种替代方法意味着同一台机器上的源树的多个副本可能相互混淆,但解决方案则不必相对于彼此以固定的方式定位。该共享也可以在网络路径上,但如果其他开发人员构建他们的更改将覆盖彼此。