Visual Studio 2008项目引用

3
我在使用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通过TestProjA又依赖于TestProj1,因此TestApp1将无法正常工作。

如果我直接将TestAppA从TestProj1中添加为项目引用(这样我就会有一个对TestProj1的引用和另一个对TestProjA的引用),那么该文件将被复制到TestAppA\bin\debug文件夹中。

当然,我可以设置自定义构建事件来将Test.txt文件复制到TestAppA\bin\debug,但我有不良经验,宁愿依赖内置的复制机制。

因此我的问题是:为什么Test.txt没有被复制到TestAppA\Bin\debug?

2个回答

4
托德已经回答得很好了,但是解决这个问题的两种更常见的方法是:
  • 在依赖项目中添加一个后构建步骤,将Test.txt复制到它们的输出文件夹中
  • 将文本文件作为TestProj1项目程序集的嵌入式资源添加,并完全摆脱外部数据文件的需要
我还建议您的所有依赖项可以简单地调用TestProj1中的API来检索所需的信息,从而允许该程序集封装数据并以任何方式、任何格式存储数据。

2

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接