我在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文件将在输出文件夹中,而任何其他构建时文件只会保留在中间文件夹中吗?
答案 0 :(得分:2)
您应该创建一个额外的“dist”文件夹(或类似文件夹),并在构建后将exe和dll文件复制到该文件夹。有许多MSBuild属性和目标可以将文件放在输出文件夹中,尝试更改此行为可能会破坏功能。
另外,如果您指定BaseIntermediateOutputPath
,则不应指定IntermediateOutputPath
。对于上述属性,您似乎正在尝试使用它:
<BaseIntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\</BaseIntermediateOutputPath>
答案 1 :(得分:1)
如果我这样做,我会创建一个bat文件作为post构建脚本运行,移动任何非dll和exe文件。