正如其他人所说,您可以在解决方案资源管理器中右键单击您的解决方案,选择添加>现有项目,并浏览到公共项目的.csproj文件,它将从其原始位置包含在解决方案中。
然而,这种方法存在两个问题,这可能是一个问题,也可能不是,这取决于您的团队规模:
1. 公共项目将以相对路径(即:...\CommonProject\Common.csproj)的方式包含在每个解决方案中。这意味着所有开发人员必须拥有相同的工作文件结构,否则当他们尝试打开主项目时,他们将会遇到错误。
2. 在公共项目被多个项目引用的情况下(比如A和B),如果正在处理项目A的开发人员需要更改公共项目作为任务的一部分,则该开发人员无法知道他们所做的更改是否会破坏项目B,除非他们实际检出项目B并编译它。随着越来越多的项目引用公共项目,这种情况发生的风险增加到无法管理的程度。
同样,正如其他人所说,没有“正确”的方法来解决这个问题。但是,我采取的方法如下:
1. 使用持续集成(例如Cruise Control)来管理项目的构建,并将公共项目作为独立的项目放在服务器上。
2. 在源代码控制下创建一个目录来存储已构建的公共DLL。在您的构建机器上检出此目录,并且每当公共项目构建时,它将输出的DLL复制到DLL文件夹中,并将这些更改提交到源代码控制。
3. 在所有开发人员的机器和构建服务器上使用环境变量来控制公共DLL文件夹的位置,并使用该变量引用DLL,而不是硬编码的路径(即:使用$(MyCommonLocation)\Common.dll而不是C:\Source\MyCommonProjectDLLS\Common.dll,其中变量“MyCommonLocation”设置为C:\Source\MyCommonProjectDLLS)。
4. 对于任何引用公共DLL的项目,在构建服务器上设置CI触发器以监视公共DLL文件夹。每当对其进行更改时,构建服务器应该构建所有消费项目。
这将立即让您知道是否正在提交破坏其他项目的更改。唯一的缺点是,在此模型中,消费项目被强制立即获取公共DLL的更新。另一种选择是从构建时的源代码控制修订版本开始对Common DLL进行版本控制,并将每个版本放置在公共DLL文件夹的自己的子目录中。因此,您将得到:
公共DLL
-1.0.0.1234
-1.0.0.1235
-1.0.0.1236
等等。 这样的好处是,每个项目都可以选择何时通过引用新版本的代码来获取公共DLL的更新。 然而,它有两面性,因为这可能意味着某些项目比应该更长时间地使用旧版本的公共代码,当最终引入这些更改时,可能会增加工作量。