Не удалось воспроизвести вашу проблему.
Я использовал MSbuild.exe из framework 3.5 и 4.0 в режиме
MSbuild.exe yourproject.csproj /p:Configuration=Release /t:Build
MSbuild.exe yourproject.csproj /p:Configuration=Release /t:Rebuild
Единственное, что я могу порекомендовать, это позвонить в подробном режиме с флагом / v: diag .
И попробуйте отключить вызов цели AfterBuild.
РЕДАКТИРОВАТЬ: Вам действительно нужно скомпилировать обе версии в IDE?
Если нет, я могу порекомендовать отключить сборку внутри IDE и оставить ее для скрипта сборки:
<Target Name="AfterBuild"
Condition="'$(BuildingInsideVisualStudio)'!='true'" >
<MSBuild Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU'"
Projects="$(MSBuildProjectFile)"
Targets="Clean;Build"
Properties="Configuration=Release35" />
</Target>
РЕДАКТИРОВАТЬ: Попробуйте ProcMon с фильтром " Имя процесса is devenv.exe " и посмотреть активность ввода-вывода файла для bin \ Release \ Args.dll во время перестройки.
Попробуйте найти диагностический вывод в VS для bin \ Release \ Args.dll . Вы увидите каждое действие перемещения / переименования / удаления с этим файлом.
Диагностический журнал показывает, что все должно быть в порядке:
Task "Copy"
Copying file from "obj\Release\Args.dll" to "bin\Release\Args.dll".
Done executing task "Copy".
Task "Message"
Args -> C:\Users\Brian\Documents\Visual Studio 2010\Projects\Args\Args\bin\Release\Args.dll
Done executing task "Message".
Журнал показывает, что нет никаких внешних помех от других инструментов. Даже с полными данными я не смог воспроизвести вашу проблему.
Чтобы построить обе конфигурации из VS, я могу предложить создать дополнительный файл Targets в каталоге Args с именем BuildArgs.csproj и добавить его в VS sln:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<BuildingProject>$(MSBuildProjectDirectory)\Args.csproj</BuildingProject>
</PropertyGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<BuildConfigurations Include="Release">
<Visible>False</Visible>
</BuildConfigurations>
<BuildConfigurations Include="Release35">
<Visible>False</Visible>
</BuildConfigurations>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release35|AnyCPU'">
<BuildConfigurations Include="Release35">
<Visible>False</Visible>
</BuildConfigurations>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<BuildConfigurations Include="Debug">
<Visible>False</Visible>
</BuildConfigurations>
</ItemGroup>
<Target Name="Build"
Condition="'@(BuildConfigurations)'!=''"
Inputs="%(BuildConfigurations.Identity)"
Outputs="_Non_Existent_Item_To_Batch_">
<Message Text="Building Configuration %(BuildConfigurations.Identity)" Importance="high" />
<MSBuild
Targets="Build"
Projects="$(BuildingProject)"
Properties="Configuration=%(BuildConfigurations.Identity)" />
</Target>
<Target Name="Rebuild"
Condition="'@(BuildConfigurations)'!=''"
Inputs="%(BuildConfigurations.Identity)"
Outputs="_Non_Existent_Item_To_Batch_">
<Message Text="Rebuilding Configuration %(BuildConfigurations.Identity)" Importance="high" />
<MSBuild
Targets="Rebuild"
Projects="$(BuildingProject)"
Properties="Configuration=%(BuildConfigurations.Identity)" />
</Target>
<Target Name="Clean"
Condition="'@(BuildConfigurations)'!=''"
Inputs="%(BuildConfigurations.Identity)"
Outputs="_Non_Existent_Item_To_Batch_">
<Message Text="Cleaning Configuration %(BuildConfigurations.Identity)" Importance="high" />
<MSBuild
Targets="Clean"
Projects="$(BuildingProject)"
Properties="Configuration=%(BuildConfigurations.Identity)" />
</Target>
</Project>
Он будет реагировать на каждую команду построения VS. Вы можете уменьшить его только для сборки только Release35
конфигурация при сборке конфигурации = релиз в VS. Такой сценарий абсолютно универсален для построения любого проекта.