visual-studio - 如何使用单个 Visual Studio 解决方案同时构建 x86 和 x64?

标签 visual-studio visual-studio-2008 msbuild 64-bit

我有一个 x86 Visual Studio 解决方案,其中包含许多项目文件。某些 DLL 文件旨在用作用户系统上其他应用程序的插件。

我们正在扩展一些 DLL 文件以支持 64 位应用程序。我想设置解决方案/项目,以便只需点击“构建”即可构建这些 DLL 的 x86 和 x64 版本
文件。该解决方案包含 C++ 和 C# 项目。

我意识到“批量构建”能够构建两者,但如果开发人员可以像以前一样单击相同的按钮并生成所有输出 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 IDE 中被忽略。

最后,我尝试创建一个单独的项目来导入第一个项目:
<?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我可以看到正在原始项目中执行的块来覆盖它,所以我不确定发生了什么。

最佳答案

我们做了一些类似于为 .NET Compact Framework 构建核心组件的事情。 .

尝试这个:

<Target Name="AfterBuild">
    <MSBuild Condition=" '$(Platform)' == 'x86' " Projects="$(MSBuildProjectFile)" Properties="Platform=x64;PlatFormTarget=x64" RunEachTargetSeparately="true" />
</Target>

关于visual-studio - 如何使用单个 Visual Studio 解决方案同时构建 x86 和 x64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574075/

相关文章:

c++ - Visual Studio const_iterator 分配错误

visual-studio - .h 文件中的值未在 .rc 文件中定义

c++ - 如何在我的二进制文件中包含调试信息?

c++ - 非事件 #ifdef block 中的编译器错误

deployment - msbuild 的 SFTP 任务?

asp.net - Sitecore 包设计器 "Unable to load one or more of the requested types"

c - RegCreateKeyEx() 和 GetLastError()

visual-studio-2008 - 在同一解决方案上交叉链接不同项目时,Visual Studio 2008 上的 C++ 链接问题

visual-studio - 如何配置 TFS Build : MSBuild Arguments: Publish Profile: File System

msbuild - tfs 构建过程很慢,需要很长时间才能完成