4

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

4

2 回答 2

2

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

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

<BaseIntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\</BaseIntermediateOutputPath>
于 2013-03-25T18:01:53.237 回答
1

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

于 2013-03-25T17:54:23.383 回答