【问题标题】:How do I ensure that Visual Studio copies dependencies of dependencies to the output folder?如何确保 Visual Studio 将依赖项的依赖项复制到输出文件夹?
【发布时间】:2013-01-31 04:58:41
【问题描述】:

我正在使用 Visual Studio 2010 来管理 Web 应用程序。这个 Web 应用程序被组织成多个项目,其中 UI 本身是一个项目,业务逻辑驻留在另一个程序集中,然后将其设置为 UI 的项目引用,并调用第三方中的代码图书馆。

当我进行部署构建时,MSBuild 会创建常用的 _PublishedWebsites 文件夹并将 Web 应用程序复制到该文件夹​​中。它没有做的是复制业务层的依​​赖关系,这意味着当我尝试运行应用程序时会出现令人讨厌的 YSOD。现在,我可以将第三方库设置为 UI 项目的引用,这样可以确保按预期复制和部署库 - 但是,这反而错过了让业务层完成所有工作的重点,并且意味着额外的维护因为当添加另一个第三方库时,需要在多个地方添加。

我怎样才能一劳永逸地确保在运行部署构建时将我的业务层的依​​赖项部署到 _PublishedWebsites 文件夹?

【问题讨论】:

    标签: asp.net visual-studio-2010 msbuild


    【解决方案1】:

    根据我对@Shaun Plourde 回复的评论,似乎不支持这种情况。如果您希望间接引用的程序集出现在构建输出中,则需要直接引用它们。

    【讨论】:

    • 但是,如果它是一个托管项目,它依赖于一个非托管库,那么您无论如何都无法将其添加为参考,因此您被搞砸了,根本无法发布工作,(缺少创建一个非常复杂的自定义 msbuild 配置,以至于没有任何维护开发人员希望了解项目部署的工作原理)。
    【解决方案2】:

    这应该在 VS.NET 中开箱即用。尝试在实际需要依赖项的地方将“复制本地”设置为 true。您的 UI 项目不应要求对这些程序集进行任何显式引用。

    对于较小的项目,这在编译性能方面可能会很好地扩展。对于较大的项目,您可能需要考虑替代方法,例如 Patrick Smacchia 的文章http://www.simple-talk.com/dotnet/.net-framework/partitioning-your-code-base-through-.net-assemblies-and-visual-studio-projects/ 中概述的方法。

    【讨论】:

    【解决方案3】:

    这不是一个完全自动化的解决方案,但您可以在主项目上使用构建后脚本来解决这个问题。

    我发现$(WebProjectOutputDir) 变量的管理方式是,当您提供的输出目录与正在构建的项目的目录不同时,它会解析为“_PublishedWebsites”目录。 (否则,它与当前项目目录相同。)因此,对于您的问题,您可以将其放在 Web 应用程序的后期构建中:

    xcopy /Y /S "$(ProjectDir)..\Your Business Logic Project\bin" "$(WebProjectOutputDir)\bin"
    

    它应该可以在您的机器和构建服务器上运行。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多