visual-studio - Visual Studio如何确定使用多项目解决方案复制到输出目录的内容?

标签 visual-studio msbuild assemblies

假设我们有一个具有以下结构的解决方案:

  • Project.DAL-数据访问层,
    取决于较低级别的库,
    例如带复制本地的Oracle.DataAccess
    =真
  • Project.BLL-业务逻辑层,将Project.DAL引用为
    项目
  • Project.UI-UI层,
    编译为可执行文件,引用
    Project.BLL,默认项目

  • 编译Project.UI时,VS足够聪明,可以将Project.DAL.dll复制到输出目录,但是要弄清楚我希望将Oracle.DataAccess也复制到输出目录以分发给客户端,也不够聪明。 。

    谁能解释为什么会这样?是否是因为它在GAC中看到了Oracle.DataAccess,并假设客户端也在GAC中也拥有了它?

    没什么大不了的,但是每次我添加一个新的程序集引用时,我都必须记住将其设置为本地复制,并添加一个项目以将其复制到我的构建脚本中,这有点烦人。

    最佳答案

    是的,Visual Studio将在以下两种情况中的任何一种情况下将DLL复制到输出路径:

  • 通过CopyLocal = true明确引用DLL。
  • DLL是在没有CopyLocal的情况下引用的,或者是通过其他一些引用的DLL 隐式引用的,并且不在GAC


  • 当文件在GAC中时,它不会在本地复制的原因是,在解析程序集名称时,GAC具有最高优先级,即,即使您具有(不同的)本地副本,也将使用GAC的版本。

    我建议您设置一个库目录,在其中放置所有引用的外部程序集。然后,您在没有插入Oracle文件的计算机(或VM)上设置了自动MSBuild脚本(为此也未安装Visual Studio)。这样,文件将被复制到内部版本,与使用VS相比,您将对执行的操作有更多的控制。

    关于visual-studio - Visual Studio如何确定使用多项目解决方案复制到输出目录的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/353617/

    相关文章:

    dependencies - 无法加载文件或程序集“someProject”或其依赖项之一。拒绝访问

    visual-studio - 卸载 visual studio 2015 shell(已隔离)

    sql-server - Visual Studio 与 SQL Server Management Studio - 您的选择

    asp.net - 设置为可更新的预编译 Web 应用程序项目的性能优势?

    .net - nuget 的程序集被 GAC 的程序集覆盖

    visual-studio-2008 - 添加引用会添加错误的版本

    c# - 在网站中使用反射访问 AssemblyInfo.cs 中的信息

    c++ - Visual Studio 在 Debug 中编译,失败 Release ("Cannot open include file")

    javascript - 在 Visual Studio 中使用 Javascript

    visual-studio - VSTS:如何在Visual Studio构建步骤为多个项目中处理FileSystem WebPublishMethod