【问题标题】:How can I make sure only *.exe or *.dll file goes to output folder and any other build files goes to intermediate folder VS2012?如何确保只有 *.exe 或 *.dll 文件进入输出文件夹,而任何其他构建文件进入中间文件夹 VS2012?
【发布时间】:2013-03-25 17:53:15
【问题描述】:

我在 VS2012 上创建了一个 C# 项目,我希望输出文件夹将只包含 .exe/.dll 文件,并且在构建项目时创建的任何其他文件都将转到中间文件夹。

我有一个定义中间位置的属性表。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <BUILD_ROOT>f:\test</BUILD_ROOT>
    <BUILD_INTERMEDIATE>f:\test</BUILD_INTERMEDIATE>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <IntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\debug\</IntermediateOutputPath>
    <BaseIntermediateOutputPath >$(IntermediateOutputPath)</BaseIntermediateOutputPath >
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <IntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\Release\</IntermediateOutputPath>
    <BaseIntermediateOutputPath >$(IntermediateOutputPath)</BaseIntermediateOutputPath >
  </PropertyGroup>

</Project>

我将此属性表手动导入到我的项目文件中

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <Import Project="$(MSBuildProjectDirectory)\PropertySheet.props" />

当我构建项目时,它会为输出和中间创建单独的文件夹。中间文件夹包含所有中间文件以及 pdb 文件。但它也包含exe文件。

但我面临的问题是,输出文件夹还包含中间文件夹中的大部分文件。如pdb、exe、config等

谁能帮我解释一下我应该怎么做,这样只有 .exe 文件会在输出文件夹中,而任何其他构建时间文件只会留在中间文件夹中?

【问题讨论】:

    标签: c# visual-studio-2012 msbuild


    【解决方案1】:

    您应该创建一个额外的“dist”文件夹(或类似文件夹)并在构建后将 exe 和 dll 文件复制到该文件夹​​。有许多 MSBuild 属性和目标可以将文件放在输出文件夹中,尝试更改此行为可能会破坏功能。

    此外,如果您指定BaseIntermediateOutputPath,则不应指定IntermediateOutputPath。在上述属性的情况下,您似乎正在尝试使用它:

    <BaseIntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\</BaseIntermediateOutputPath>
    

    【讨论】:

    • 感谢这个想法。实际上我正在将一个大项目从 VS2005 转换为 VS 2012。在 VS2005 上,我确实设置了单独的中间和输出文件夹,只有 exe 和 dll 用于输出文件夹。您的建议将解决我的问题,但我仍然有一个问题,即 VS2012 中导致所有构建文件都进入中间文件夹和输出文件夹的变化是什么??
    • @Shahed 这里没有简单的答案。标记为“复制到输出文件夹”的文件将出现在您的输出目录中,以及一些通常被视为最终构建输出的一部分的文件(例如 pdb 和配置文件)。
    【解决方案2】:

    如果我这样做,我会创建一个 bat 文件作为构建后脚本运行,该脚本会移动任何非 dll 和 exe 文件。

    【讨论】:

    • 同意。这是我通常执行构建后 bat 的操作(; 表示新行,因为我无法在评论中格式化但实际上不在命令行脚本中): if $(ConfigurationName) == Release exit 0; cd $(项目目录); "$(ProjectDir)"postBuild.bat;
    • 感谢这个想法。实际上我正在将一个大项目从 VS2005 转换为 VS 2012。在 VS2005 上,我确实设置了单独的中间和输出文件夹,只有 exe 和 dll 用于输出文件夹。您的建议将解决我的问题,但我仍然有一个问题,即 VS2012 中导致所有构建文件都进入中间文件夹和输出文件夹的变化是什么??
    • @Shahed,明白了。我讨厌提供一个不能回答您的问题但建议另一种方法的答案。我讨厌别人做而我自己做的时候>_
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2017-12-22
    相关资源
    最近更新 更多