如何确保只有* .exe或* .dll文件转到输出文件夹,其他任何构建文件都转到中间文件夹VS2012?

时间:2013-03-25 17:53:16

标签: c# visual-studio-2012 msbuild

我在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文件将在输出文件夹中,而任何其他构建时文件只会保留在中间文件夹中吗?

2 个答案:

答案 0 :(得分:2)

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

另外,如果您指定BaseIntermediateOutputPath,则不应指定IntermediateOutputPath。对于上述属性,您似乎正在尝试使用它:

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

答案 1 :(得分:1)

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

相关问题