代码之家  ›  专栏  ›  技术社区  ›  Eric Nicholson

如何强制MSBuild以32位模式编译?

  •  30
  • Eric Nicholson  · 技术社区  · 16 年前

    NAnt )汇编一堆 VB.NET 装配。因为这些程序集依赖于COM互操作,所以我需要保证它们在64位操作系统上以32位模式运行。通过在VisualStudio中更改项目,我可以将可执行程序集编译为32位,但我确实希望能够在构建服务器上强制将所有可执行文件编译为32位模式。

    我尝试了许多命令行参数来创建MSBuild,但没有成功:

    • /p:Platform=win32
    • /p:Platform=x86
    • /p:ProcessorArchitecture=x86

    我做错了什么?在编译VB项目时,是否参考了MSBuild使用的属性?

    8 回复  |  直到 13 年前
        1
  •  53
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    根据 MSDN ,你做得对。看起来像 /p:Platform=x86 /p:PlatformTarget=x86 .

    尝试直接使用该参数调用MSBuild(确保NAnt文件没有问题。查看生成输出以获得正确的生成配置)( / 释放

        2
  •  22
  •   JaredPar    16 年前

    如果程序集本身总是32位的,为什么不将该设置添加到.vbproj文件中?这将把MSBuild从等式中去掉。

    只需将以下行添加到.vbproj文件中的初始属性组

    <PlatformTarget>x86</PlatformTarget>
    
        3
  •  18
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    为了以防万一,我使用以下命令行构建x86平台目标:

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86
    
        4
  •  3
  •   Turker Tunali    8 年前

    对于MSBuild版本15,它是

        5
  •  3
  •   Uwe Keim    6 年前

    在解决方案资源管理器中,右键单击根节点 配置管理器 . 您需要定义一个解决方案范围的配置,该配置指示其中的每个项目以32位的形式构建。(注意:如果您至少将一个项目设置为32位构建,那么您可能已经有了一个。)有关分步演练,请参阅MSDN博客文章 Solution Configurations .

    然后,您可以在应用程序中指定所需的“平台”和“风格” Team Build .proj / .targets 文件夹。例如:

    <ConfigurationToBuild Include="Release|x86">
        <FlavorToBuild>Release</FlavorToBuild>
        <PlatformToBuild>x86</PlatformToBuild>
    </ConfigurationToBuild>
    

    .sln

    关于你的评论:

    MSBuild属性求值非常复杂,因为它混合了声明式和命令式样式。请参阅博客帖子 MSBuild Property Evaluation 详情请参阅。我不喜欢依赖它的微妙之处。

    的确,在命令行上指定的属性应该覆盖所有其他属性,但是团队构建还有另一层复杂性。 The ComputeConfigurationList task is called repeatedly via a recursive MSBuild invokation, not as an ordinary task . 它实现这一点的方法是采用普通属性,如 PlatformToBuild 并将它们包装在一组称为 ConfigurationToBuild.PlatformToBuild

    你可以试着设置 配置ToBuild.PlatformToBuild 直接在命令行上它可能会工作,我不确定。但它肯定会阻止您在单个构建定义中构建多个配置。出于这个原因,我坚持上面的建议。

        6
  •  2
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    在遇到完全相同的问题后,我从使用MSBuild的版本切换到 C:\WINDOWS\Microsoft.NET\Framework64 C:\WINDOWS\Microsoft.NET\Framework (否) 64

        7
  •  1
  •   dwonisch    13 年前

    Nant msbuild任务可回答此问题:

    <msbuild project="your.sln">
        <property name="PlatformTarget" value="x86" />
    </msbuild>
    
        8
  •  0
  •   Soundararajan    7 年前

    我使用的一种更实用的方法是打开一个.csproj项目来查找正确的属性 /p:平台=x64

    推荐文章