我正在使用 MSBuild (通过 南安特)编译一堆 网络 组件。因为这些程序集依赖于 COM Interop,所以我需要保证它们在 64 位操作系统上以 32 位模式运行。我可以通过更改 Visual Studio 中的项目来将可执行程序集编译为 32 位,但我真的希望能够强制所有可执行文件在生成服务器上编译为 32 位模式。

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

  • /p:平台=win32
  • /p:平台=x86
  • /p:处理器架构=x86

我究竟做错了什么?是否有一些关于 MSBuild 在编译 VB 项目时使用的属性的参考?

有帮助吗?

解决方案

如果程序集本身始终是 32 位,为什么不将设置添加到 .vbproj 文件中?这将把 MSBuild 排除在外。

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

<PlatformTarget>x86</PlatformTarget>

其他提示

根据 微软软件定义网络, ,你做的是正确的事。好像 /p:Platform=x86, ,但实际上,也许是 /p:PlatformTarget=x86.

尝试使用该参数直接调用 MSBuild(确保这不是您的 NAnt 文件的问题。查看构建输出以获得正确的构建配置(调试 / 发布).

为了以防万一这有帮助,我使用此命令行来构建我的 x86 平台目标:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86

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

然后,您在您的应用程序中指定所需的“平台”和“风味” 团队建设 .proj / .targets 文件。例如:

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

您可以指定多个属性部分来构建多种组合。我会直接从您的系统中复制/粘贴“Release|x86”字符串(或任何看起来像的内容) .sln 文件以确保它完全匹配 - 您无法直接从解决方案资源管理器获取它。

关于您的评论:

MSBuild 属性评估非常复杂,因为它混合了声明式和命令式样式。请参阅博客文章 MSBuild 属性评估 了解详情。我宁愿不依赖它的微妙之处。

确实,在命令行上指定的属性应该覆盖其他所有内容,但 Team Build 还有另一层复杂性。 ComputeConfigurationList 任务通过递归 MSBuild 调用重复调用,而不是作为普通任务. 。它实现这一点的方法是采用普通属性,例如 PlatformToBuild 并将它们包装在一组名为的全局属性中 ConfigurationToBuild.PlatformToBuild (等),它们是动态生成的,每个配置一次。这使得 Team Build 引擎内部更加灵活,但也使得破解您想要的命令行行为变得更加困难。

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

遇到完全相同的问题后,我不再使用 MSBuild 版本 C:\WINDOWS\Microsoft.NET\Framework64...到版本 C:\WINDOWS\Microsoft.NET\Framework (不 64)并且编译得很好。

对于MSBUILD版本15,它是 /p:platformTarget = x86

Nant msbuild-Task 对这个问题的回答:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>

我用来找到合适属性的一种更实用的方法是打开一个.csproj项目文件之一(如果在C#的情况下),然后查看当您从Visual中选择“ x64” /“ anycpu” /“ x86”时,该属性会受到影响。斯蒂奥。无论更改什么属性,您都需要从命令行进行设置。对于 Visual studio 2015,它似乎是 <Platform>。所以你可以用参数调用 msbuild /p:平台=x64 它应该有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top