MSBuild预清洁定制

win*_*nie 7 msbuild visual-studio-2010

我正在使用Visual Studio 2010.我已将项目输出定向到特定文件夹,该文件夹将在构建时包含所有DLL和EXE.但是,当我清理解决方案时,文件夹没有得到清理,并且DLL仍然存在于其中.

任何人都可以告诉我如何处理清洁解决方案命令以清除我想要清理的文件夹?我尝试使用MSBuild并处理BeforeClean和AfterClean目标,但它没有提供所需的结果.

Ben*_*ann 8

Sergio的答案应该有效,但我认为覆盖BeforeClean/AfterClean目标可能更清晰.这些是微软提供的构建/清理过程的钩子.当你做一个干净的时候,VS会调用目标:BeforeClean; Clean; AfterClean,默认情况下,第一个和最后一个什么都不做.

在您现有的.csproj文件中,您可以添加以下内容:

<Target Name="BeforeClean">
  <!-- DO YOUR STUFF HERE -->
</Target>
Run Code Online (Sandbox Code Playgroud)


Ser*_*kov 2

您可以将名为BuildCustomAction.csproj的特殊目标添加到 VS .sln 文件中:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build"     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  </PropertyGroup>

  <ItemGroup>
      <CleanOutCatalogFiles Include="..\..\bin\$(Configuration)\**\*.dll">
         <Visible>false</Visible>
      </CleanOutCatalogFiles> 
      <CleanOutCatalogFiles Include="..\..\bin\$(Configuration)\**\*.exe">
         <Visible>false</Visible>
      </CleanOutCatalogFiles> 
  </ItemGroup>    

  <Target Name="Build">                                 
  </Target>                                            

  <Target Name="Rebuild"
          DependsOnTargets="Clean;Build">                    
  </Target>

  <Target Name="Clean"
          Condition="'@(CleanOutCatalogFiles)'!=''">
    <Message Text="Cleaning Output Dlls and EXEs" Importance="high" />
    <Delete Files="@(CleanOutCatalogFiles)" />
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

将其放置在您想要的任何位置,并指定二进制文件的输出目录的相对路径。在 VS 中添加该项目作为现有项目。就这样。有了这个,您可以为 VS 中的三个常见操作执行自己的自定义操作:BuildRebuildClean

存在更复杂的方法来使用CustomBeforeMicrosoftCommonTargetsCustomAfterMicrosoftCommonTargets自定义构建过程,但它需要在 MSBuild 中非常好。

希望这可以帮助。