2009-12-03 224 views
3

我在Visual Studio 2008中的“复制到输出”功能有问题。也许我误解了它应该如何工作。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.Core程序,等),以及一个参考)

在TestProj1,我已经加入一个文本文件,Test.txt的。在这个文件的属性中,我指定了“Build Action:Content”和“Copy to Output Directory:Copy always”。

当我生成解决方案,Test.txt的被复制到

  • TestApp1 \ BIN \调试
  • TestProj1 \ BIN \调试
  • TestProjA \ BIN \调试

的文件是而不是复制到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?

回答

4

托德已经回答很好,但是这两个常见的解决方案是:

  • 添加一个生成后步骤到XCOPY中的test.txt到他们的输出文件夹
  • 添加文本的相关项目文件作为你的TestProj1项目的组装嵌入的资源和外部数据文件摆脱需要完全

我也建议你所有的依赖关系可以简单地调用TestProj1的API来获取他们所需要的信息,允许使用该程序集封装数据并将其存储在任何地方,然后以任何喜欢的格式存储。

+1

+1为封装建议。 – Todd 2009-12-12 17:16:47

2

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

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

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