如何将 C# 项目目录传递到解决方案输出目录

How to deliver a C# project directory to a solution output directory

我有一个包含许多项目的 VS2010.NET 解决方案。其中一个项目中有一个非源代码目录。当我构建这个解决方案时,我需要将该目录复制到解决方案构建输出目录。我想要做的是在我的解决方案运行时访问该文件夹中的文件。由于这个应用会分发到多台电脑,所以我也需要分发这组数据文件。

回顾一下,这是我的(简化的)解决方案层次结构

solution
|
+----MainProject
|    |
|    +----source.cs
|
+----SupportPorject
     |
     +----source.cs
     +----MyFolder
          |
          +----DataFile1
          +----DataFile2
          +----DataFile3

当我构建解决方案时,我希望有以下内容

solution
|
+----bin
     |
     +----Debug
     |    |
     |    +----Solution.exe
     |    +----SupportProject.dll
     |    +----SupportProject.pdb
     |    +----MyFolder
     |         |
     |         +----DataFile1
     |         +----DataFile2
     |         +----DataFile3
     |
     +----Release
          |
          +----Solution.exe
          +----SupportProject.dll
          +----MyFolder
               |
               +----DataFile1
               +----DataFile2
               +----DataFile3

您可能希望在 Visual Studio 构建 Pre/Post 事件中使用 Xcopy,具体取决于您需要文件的顺序。 xcopy SourceFolder $(SolutionDir)YourFolderNameHere*.*" /E /H

如本 post 中所述 here

另一个解决方案是编辑您的 .csproj 并搜索 OutputPath 标签。对于 Debug 输出,它必须类似于:

<OutputPath>bin\Debug\</OutputPath>

根据您的要求,设置为:

<OutputPath>..\bin\Debug\</OutputPath>

Visual Studio 还有一个选项可以将文件复制到输出目录。只需将您的内容从 "Do Not Copy" 更改为 "Copy Always"。您可以在文件属性中找到设置。

经过大量研究,我偶然发现了答案(部分基于 this answer to a similar question)。解决方案涉及使用以下内容手动修改 SupportProject.cproj 文件

<ItemGroup>
    <Content Include="MyFolder\**">
        <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>