【问题标题】:Common files in output directories in a C# programC# 程序输出目录中的通用文件
【发布时间】:2011-01-12 06:51:24
【问题描述】:

我的 VS2008 解决方案有以下设置。

  • 程序1
  • 程序2
  • Common.dll(由 Program1 和 Program2 使用和引用)

在调试模式下,我喜欢将输出目录设置为 Program Files\Productname,因为某些代码会因为各种原因获取 exe 路径。

我的问题是Program1在编译时会报错,如果Program2启动则无法复制Common.dll。反之亦然。

这里的烦恼是我什至不经常对 Common.dll 进行更改,但 100% 的时间它会尝试复制它,而不仅仅是在发生更改时。我最终不得不关闭所有程序,然后构建并启动它们。

所以我的问题是,如果Common.dll项目内部有变化,我怎么才能让VS2008只复制Common.dll?

【问题讨论】:

    标签: c# .net visual-studio-2008 build


    【解决方案1】:

    我尝试了以下方法,我认为它显示了您正在寻找的行为:

    • 将 common.dll 项目的输出更改为 Program Files\Productname(即与 program1 和 program2 相同
    • 在 program1 和 program2 项目中:在对 common.dll 的引用上将“本地复制”设置为 false

    这样,Visual Studio 只会在其源代码发生更改时尝试复制 common.dll。

    【讨论】:

      【解决方案2】:

      为什么不直接在 Program1 和 Program2 中引用 Common.dll 而不是复制 DLL?这样最新版本始终可用并且始终与应用程序一起编译?另外,可以从Program1/2调试到Common.dll吗?

      【讨论】:

      • 我不是说要复制 DLL,它只是通过引用自动发生的。
      【解决方案3】:

      与其更改输出目录以便知道可执行文件的位置,不如使用:

      System.Reflection.Assembly.GetExecutingAssembly().Location
      

      【讨论】:

      • 这也可以解决有人不安装到祝福路径,使用本地化版本的Windows,x64版本等的问题。
      【解决方案4】:

      在你的 Common.DLL 项目中加入类似的东西

      copy $(TargetPath) $($ProjectPath)..\..\Program1\
      copy $(TargetPath) $($ProjectPath)..\..\Program2\
      

      并从它们各自的位置引用它们。

      理想情况下,您应该将所有三个项目放在一个解决方案中,并引用项目而不是 dll,构建整个解决方案,然后运行它。这会自动处理所有这些:)

      【讨论】:

      • Visual Studio 会自动执行此操作。问题是在部署后运行应用程序,而不是在调试器中。
      【解决方案5】:

      我所做的(也是出于调试原因)是在解决方案级别创建一个“bin”文件夹,并在项目选项的 Build 选项卡上更改 输出路径所有项目到一个公共路径,即“bin\Debug\”到“solution\bin\debug”(其中解决方案是解决方案路径)。

      为每个“配置”执行此操作,例如“解决方案\bin\release”等

      让 Visual Studio 处理更新文件等。

      注意如果您正在使用调试应用程序,无论如何您将无法复制新文件,它已被锁定等...

      PK :-)

      【讨论】:

      • 这根本没有回答问题。关键是应用程序中有多个 exe 组件都引用了 dll。
      猜你喜欢
      • 2012-02-06
      • 2011-05-11
      • 2022-12-17
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多