Visual studio 2008 VisualStudio2008项目参考

Visual studio 2008 VisualStudio2008项目参考,visual-studio-2008,file,build,reference,copying,Visual Studio 2008,File,Build,Reference,Copying,我对VisualStudio2008中的“复制到输出”功能有问题。也许我误解了它的工作原理 我有一个包含四个项目的解决方案: TestApp1(Windows应用程序) TestAppA(Windows应用程序) TestProj1(类库) TestProjA(类库) 依赖项如下所示(依赖项如项目参考中所示) TestProj1不依赖于任何内容 TestApp1取决于TestProj1 TestProjA依赖于TestProj1 TestAppA依赖于TestProjA(因此间接依赖于Te

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

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

  • TestApp1(Windows应用程序)
  • TestAppA(Windows应用程序)
  • TestProj1(类库)
  • TestProjA(类库)
依赖项如下所示(依赖项如项目参考中所示)

  • TestProj1不依赖于任何内容
  • TestApp1取决于TestProj1
  • TestProjA依赖于TestProj1
  • TestAppA依赖于TestProjA(因此间接依赖于TestProj1)
换句话说,依赖关系树如下所示

TestApp1
    TestProj1
TestProjA
    TestProj1
TestAppA
    TestProjA
        TestProj1
(每个项目还参考了标准组件(系统、系统核心等)

在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只查看内容文件的直接引用,所以TestAppA不知道Test.txt存在,因为它在TestProjA项目文件中没有看到它

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


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

Todd的答案已经很好了,但还有两种常见的解决方案:

  • 将生成后步骤添加到依赖项目中,将Test.txt复制到其输出文件夹中
  • 将文本文件作为嵌入式资源添加到TestProj1项目的程序集中,完全不需要外部数据文件
我还建议您的所有依赖项都可以简单地调用TestProj1中的API来检索它们所需的信息,从而允许该程序集封装数据并将其存储在任意位置,以它喜欢的任何格式存储