我正在使用Visual Studio 2010来管理Web应用程序。此Web应用程序组织为多个项目,其中UI本身是一个项目,业务逻辑驻留在另一个程序集中,然后将其设置为UI的项目引用,并调用第三方的代码库。
当我进行部署构建时,MSBuild会创建通常的_PublishedWebsites文件夹并将Web应用程序复制到那里。它没有做的是复制业务层的依赖关系,这意味着当我尝试运行应用程序时讨厌的YSOD。现在,我可以将第三方库设置为UI项目的引用,并确保按预期复制和部署库 - 但是,这相当于错过了业务层完成所有工作的重点,并且意味着额外的维护因为当添加另一个第三方库时,需要在多个地方添加它。
在部署构建运行时,如何一劳永逸地确保业务层的依赖关系部署到_PublishedWebsites文件夹?
答案 0 :(得分:1)
根据我对@Shaun Plourde的回复的评论,似乎不支持此方案。如果您希望间接引用的程序集出现在构建输出中,则需要直接引用它们。
答案 1 :(得分:0)
这应该只是VS.NET的开箱即用。尝试将“Copy local”设置为true,实际需要依赖项。您的UI项目不应该要求对这些程序集进行任何显式引用。
对于较小的项目,这在编译性能方面可能会很好。对于大型项目,您可能需要考虑其他方法,例如Patrick Smacchia在http://www.simple-talk.com/dotnet/.net-framework/partitioning-your-code-base-through-.net-assemblies-and-visual-studio-projects/的文章中概述的方法。
答案 2 :(得分:0)
这不是一个完全自动化的解决方案,但您可以使用主项目上的构建后脚本来解决此问题。
我发现管理$(WebProjectOutputDir)
变量时,如果提供的输出目录不等于正在构建的项目的目录,它会解析为“_PublishedWebsites”目录。 (否则,它与当前项目目录相同。)因此,对于您的问题,您可以将其放在Web应用程序的后期构建中:
xcopy /Y /S "$(ProjectDir)..\Your Business Logic Project\bin" "$(WebProjectOutputDir)\bin"
它应该可以在您的计算机和构建服务器上运行。