【问题标题】:Visual Studio 2008 project referenceVisual Studio 2008 项目参考
【发布时间】:2010-12-22 19:35:21
【问题描述】:

我对 Visual Studio 2008 中的“复制到输出”功能有疑问。也许我误解了它的工作原理。

我有四个项目的解决方案:

  • TestApp1(Windows 应用程序)
  • TestAppA(Windows 应用程序)
  • TestProj1(类库)
  • TestProjA(类库)

依赖如下(依赖如项目参考)。

  • TestProj1 不依赖任何东西。
  • TestApp1 依赖于 TestProj1
  • TestProjA 依赖于 TestProj1
  • TestAppA 依赖于 TestProjA(因此间接依赖于 TestProj1)

换句话说,依赖树看起来像这样。

TestApp1
    TestProj1
TestProjA
    TestProj1
TestAppA
    TestProjA
        TestProj1

(每个项目也有对标准程序集(system、system.core 等)的引用)

在 TestProj1 中,我添加了一个文本文件 Test.txt。在此文件的属性中,我指定了“构建操作:内容”和“复制到输出目录:始终复制”。

当我构建解决方案时,Test.txt 被复制到

  • TestApp1\bin\Debug
  • TestProj1\bin\Debug
  • TestProjA\bin\Debug

文件没有复制到TestAppA\bin\debug,这就是我觉得奇怪的地方。由于TestProj1 依赖Test.txt 工作,而TestAppA 依赖TestProj1,通过TestProjA,TestApp1 将无法工作。

如果我将来自 TestAppA 的项目引用直接添加到 TestProj1(所以我有一个对 TestProj1 的引用和另一个对 TestProjA 的引用),该文件将被复制到 TestAppA\bin\debug 文件夹。

当然,我可以设置自定义构建事件来将文件 Test.txt 复制到 TestAppA\bin\debug,但是我对自定义构建事件有不好的体验,并且更愿意依赖内置的复制机制。

所以我的问题是:为什么不将 Test.txt 复制到 TestAppA\Bin\debug?

【问题讨论】:

    标签: visual-studio-2008 file build reference copying


    【解决方案1】:

    Todd 已经回答得很好,但有两个更常见的解决方案是:

    • 为您的依赖项目添加构建后步骤,将 Test.txt 复制到其输出文件夹中
    • 将文本文件作为嵌入资源添加到 TestProj1 项目的程序集中,完全无需外部数据文件

    我还建议,您的所有依赖项都可以简单地调用 TestProj1 中的 API 来检索它们所需的信息,从而允许该程序集封装数据并将其存储在任何地方,无论它喜欢什么格式。

    【讨论】:

      【解决方案2】:

      Visual Studio 仅查看内容文件的直接引用,因此 TestAppA 不知道 Test.txt 存在,因为它在 TestProjA 项目文件中看不到它。

      这是 Visual Studio 的一个限制,也是许多人最终将所有项目的输出指向同一个文件夹的原因。

      您拥有的另一个选项是创建一个“SharedContent”文件夹。然后,您可以将文本文件放在该文件夹中,并通过在每个项目上选择“添加 > 现有项目...”将其添加到依赖它的每个项目中。在“添加项目”对话框中,从共享文件夹中选择文本文件,然后单击“添加”按钮上的小向下箭头。如果您选择“添加为链接”,您可以将文件添加到您的项目中而无需创建副本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-24
        • 1970-01-01
        • 2014-03-14
        • 1970-01-01
        • 2011-05-17
        • 1970-01-01
        • 2010-12-09
        • 1970-01-01
        相关资源
        最近更新 更多