MVC:需要用多个项目构建我的应用程序

本文关键字:项目 构建 我的 应用程序 MVC | 更新日期: 2023-09-27 17:58:54

我有一个包含许多项目的应用程序。有时我发现我必须删除dll并重新编译每个项目,然后才能进行全面的干净编译。我还发现,当我进行构建时,我必须记住签出存储在bin文件夹中的每个项目的dll,编译每个项目,签入dll,然后运行构建以获得干净的编译。这很麻烦。我只想为我所做的任何更改以及发布时重新构建一次。那么我该如何解决这个问题呢?

MVC:需要用多个项目构建我的应用程序

我们在我工作的公司遇到了这个问题,我们仍在努力解决。

我的第一个建议是,在您的解决方案中不要使用公共库的项目引用。你说你的项目的bin文件夹中有一些内部dll。你需要问问自己:

  • 这些dll是该解决方案特有的吗
  • 或者,它们是你将再次使用的常用库吗

如果是前者,那么我建议您将dlls源代码作为解决方案中的一个项目。在Visual Studio中正确设置"生成顺序","重建解决方案"将确保所有内容都得到干净的生成。

然而,如果是后者,并且您将在其他解决方案中重用这些dll,那么它们应该在自己的解决方案中。理想情况下,使用诸如Cruise Control之类的构建服务器。这将允许您对公共库进行更改,并且如果设置正确,它将自动使用新的版本号重新编译公共库。然后,一旦你的公共库通过了测试,并且你很乐意发布它,就把它放在你正在处理的项目中的"bin"或"Dependencies"文件夹中。引用该dll,而不是像上一个例子中那样引用项目。当你构建你的项目时,它将在编译时使用bin/Dependencies文件夹中的dll。

这样做的好处是,如果您在一个解决方案中使用公共库,并将其发布给客户端或作为项目,然后更改公共库并发布新的客户端解决方案/产品,您将确切地知道使用的是公共库的哪个版本。然后你可以转到你的源代码管理并提取确切的代码。

我们使用了一些产品,并在实现的每个客户解决方案中有效地扩展了它们。在十几个项目之后,我们不知道每个客户端运行的代码版本是什么。自从我们转到Cruise Control并与Mercurial合作SSC后,我们现在清楚地知道我们所有的产品和客户解决方案都在使用什么版本的代码。

如果没有更多细节,很难确切知道需要什么来解决特定问题,但这些技巧应该会有很大帮助。

当我进行构建时,我必须记住签出每个的dll存储在垃圾箱文件夹中的项目

首先,不要将bin文件夹的内容存储在源代码管理中。相反,只在需要与某人共享时发布构建,并将其放在源代码管理系统中的其他位置。这里有一个文件夹结构的例子,可以这样工作。

-我的产品--主要----src----bin<lt;未签入----等等。。。-分销--我的项目----发布编号------明确发布的dlls

我必须删除dll并重新编译每个项目,然后才能进行全面的干净编译。

有时会发生这种情况。在Visual Studio中使用"重建解决方案"命令。

如果使用文件引用而不是项目引用,则会导致这种情况更频繁地发生。使用项目引用。有关的详细信息,请参阅此问题

项目参考与文件参考?

如果由于某种原因无法使用项目引用,可以手动更改解决方案的生成顺序,并设置项目之间的依赖关系,以便更好地进行更新。

有时我发现我不得不删除dll并重新编译每个项目在我得到一个全面干净的编译之前。

右键单击解决方案>清洁解决方案。然后重新构建。这通常会清除奇怪的构建错误。

我还发现,当我进行构建时,我必须记住签出dll对于存储在bin文件夹中的每个项目,编译每个项目,签入dll,然后运行生成以获得干净的编写

这很可能是真正的问题。不要将外部dll直接添加到bin中。相反,将任何第三方dll添加到解决方案根目录下的文件夹中,或者实际上添加到您可以访问的任何其他位置,但我发现根目录是一个很好的位置:

 - Solution Folder
   - ExtLib (place all your 3rd party assemblies here; use sub-folders if needed)
   - Project A
   - Project B
   - MySolution.sln

然后根据需要从ExtLib:AddReference>Browse:Adddll添加对每个项目的引用。

添加dll后,请确保将其标记为"复制本地":引用>右键单击程序集:复制本地=True。

如果需要引用的程序集位于相关项目中,则只需添加项目引用;不需要复制本地,因为VS会为您处理这些问题。

通过以上操作,您可以将第三方程序集保存在ExtLib文件夹中,并在需要时添加到源代码管理中。然后,每当有人从源代码管理中删除项目时,他们都会拿起ExtLib文件夹和任何更新的程序集。无论何时构建,程序集都会从ExtLib中引用并复制到bin中。

正如其他人所提到的,永远不要将你的bin文件夹添加到源代码管理:YMMV。