У меня есть решение x86 Visual Studio со многими файлами проекта. Некоторые из DLL разработаны для работы в качестве плагинов для других приложений в пользовательской системе. Мы расширяем некоторые библиотеки DLL, чтобы поддерживать 64-разрядные приложения. То, что я хотел бы сделать, - это настроить решение/проекты, чтобы просто нажимать "Build" будет строить как x86, так и x64 версии этих DLL. Решение содержит проекты С++ и С#. Я понимаю, что "Batch Build" способна создавать оба, хотя было бы более удобно, если бы разработчики могли просто нажать ту же кнопку, что и раньше, и создать все выходные DLL файлы.
Вот несколько модификаций, которые я пробовал в тестовом проекте, но не приступили к работе:
Я попытался изменить <Target Name="AfterBuild">
, чтобы попробовать:
<Target Name="AfterBuild" Condition=" '$(Platform)' == 'x86' ">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
но это приводит к следующей ошибке:
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(565,5): error MSB4006: There is a circular dependency in the target dependency graph involving target "Build".
Я думаю, что мои условия будут препятствовать бесконечной рекурсии, но я понимаю, как MSBuild не мог этого видеть.
Я также пробовал:
<Project DefaultTargets="MyBuild86;MyBuild64" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
...
<Target Name="MyBuild86">
<PropertyGroup>
<Platform>x86</Platform>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
<Target Name="MyBuild64">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
но мой DefaultTargets
, как представляется, игнорируется внутри среды Visual Studio.
Наконец, я попытался создать отдельный проект, который импортирует первый проект:
<?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>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<OutputPath>..\$(Configuration)\x64\</OutputPath>
<ProjectGuid>{A885CAC3-2BBE-4808-B470-5B8D482CFF0A}</ProjectGuid>
</PropertyGroup>
<Import Project="BuildTest.csproj" />
</Project>
и это пока показало, что обещает. Однако Visual Studio, похоже, игнорирует мой параметр OutputPath
из этого нового проекта и вместо этого выводит exe/dll на путь, указанный в исходном проекте. Там нет блока PropertyGroup
, который я вижу, который выполняется в исходном проекте, чтобы переопределить это, поэтому я не уверен, что происходит.