Ни один из ответов здесь не работает для меня.
Они либо выдают ошибки, либо ничего не делают.
Вот мое решение, которое работает в VS2005, и я полагаю, что оно также будет работать в более новых версиях VS. Отредактируйте файл * .csproj так:
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
if $(PlatformTarget) == x86 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_32.exe"
if $(PlatformTarget) == x64 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_64.exe"
</PostBuildEvent>
</PropertyGroup>
В результате 32-битная компиляция создает файл ProjectName_32.exe
, а 64-битная сборка - ProjectName_64.exe
.
Обратите внимание на странный синтаксис. Вокруг условия if
не должно быть скобок, а x86
не должно быть в кавычках.
Недостатком этого метода является то, что вы больше не можете запускать Exe в отладчике, поскольку Visual Studio не находит сгенерированный Exe. Эту проблему можно решить, заменив команду «move» на команду «copy», но в этом случае вам придется скопировать Exe в другой каталог, потому что, конечно, вы не хотите, чтобы один и тот же файл дважды находился в одном каталоге. 1016 *
Все это беспорядок. Действительно невероятно, что вы можете ввести выходной каталог непосредственно в настройках проекта, но чтобы сделать что-то действительно простое, например, изменить имя Exe, вы должны написать такой неуклюжий скрипт, который имеет неприятные побочные эффекты. Позор Microsoft!