【问题标题】:How to deliver a C# project directory to a solution output directory如何将 C# 项目目录传递到解决方案输出目录
【发布时间】:2015-04-18 18:46:06
【问题描述】:

我有一个包含许多项目的 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

【问题讨论】:

  • 也许我错过了细微差别,但我认为只要您将MyFolder 设置为复制出来,它就应该完全按照您的描述进行。你现在得到什么?
  • 为什么不做一个在构建后事件中运行的简单复制命令?

标签: c# build project solution


【解决方案1】:

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

正如本文在here 中解释的那样

【讨论】:

  • 据我了解 XCOPY 解决方案,它必须在我的“支持”项目的构建前或构建后事件中指定。如果是这种情况,那么我会看到两个问题: 1. 我必须将解决方案名称硬编码到 XCOPY 命令中。有一些环境变量吗? 2. 我必须将调试或发布输出路径之一硬编码到 XCOPY 命令中。是否有一些环境变量?
【解决方案2】:

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

<OutputPath>bin\Debug\</OutputPath>

根据您的要求,设置为:

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

【讨论】:

    【解决方案3】:

    Visual Studio 还可以选择将文件复制到输出目录。只需将您的内容从“请勿复制”更改为“始终复制”即可。您可以在文件属性中找到设置。

    【讨论】:

    • 我知道项目中文件的“始终复制”选项。但是,我的示例非常简化。实际上,我在 MyFolder 中不是只有 3 个文件,而是有数百个文件分布在多个子文件夹(和子子文件夹)中,并且必须保留它们的层次结构。当我点击我的顶级“MyFolder”时,我没有得到“始终复制”的选项
    【解决方案4】:

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

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

    【讨论】:

    • 应该标记为答案,它有效。链接元素不是必需的,因为它在解决方案中显示了两次内容,您可以将自己的答案标记为答案:)
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2017-04-22
    • 2012-01-17
    相关资源
    最近更新 更多