Msbuild输出二进制文件到另一个平台

问题描述

我有一个解决方案,其中包含各种项目,并且需要将某些项目构建为x86 for ARM64。 当我为debug / ARM64构建整个解决方案时,有些二进制文件放入bin \ x86(对于正在构建为x86的项目),而有些二进制文件则放入bin \ ARM64。

MSBUILD中是否有一种方法可以将二进制文件放入bin \ ARM64中,即使它们可以构建为x86二进制文件也可以? 还是我应该让那些构建,然后从bin \ x86复制到bin \ ARM64?

解决方法

我认为您只是使用Debug/ARM64解决方案平台来构建您的解决方案,但是其他项目是使用其他平台来构建的,导致某些项目是使用x86来构建的,而另一些项目是使用ARM64来构建的。 / p>

提示1

如果您想使用解决方案平台 Debug / ARM64 将所有项目一次构建到ARM64,则应打开 Build -> 配置管理器

尽管已将解决方案平台设置为ARM64,但是您也可以将 Project Platform 更改为其他版本。最终,构建过程仍然基于项目平台。

enter image description here

您应该将每个项目平台更改为ARM64,然后在构建解决方案时,它将把每个项目都构建到ARM64输出文件夹中。

提示2

只是一个猜测,如果猜测是错误的,请忽略它

============================

如果您构建一个项目,则某些文件位于项目文件夹的bin\ARM64中,而其他二进制文件位于项目文件夹的bin\x86中。

如果是,则应该为每个此类项目执行复制任务

<Target Name="CopyFiles" BeforeTargets="Build">

        <ItemGroup>
            <Files Include="bin\x86\Debug\xxx.xxx // Any binary files"></Files>
        </ItemGroup>
        <Copy SourceFiles="@(Files)"
         DestinationFolder="bin\ARM64\Debug"></Copy>
        
</Target>

将此目标添加到此类项目的任何xxx.csproj文件中。

=======================================

更新1

实际上,在使用x86构建项目时,vs中有这样的选项来指定一些要在ARM64中编译的项目文件。

指定在哪个平台上构建项目,然后基于该平台构建项目中的所有文件。

所以我建议您可以使用批处理构建X86ARM64上都构建项目,然后使用我的CopyFiles目标复制这些{{在构建过程中将1}}个文件放入x86文件夹中。

首先,将此目标添加到ARM64文件中:

然后,单击 Build 菜单-> 批处理

enter image description here

点击构建以同时执行它们,在此过程中,将触发目标。

此外,也许更简单的方法是将文件从xxx.csproj文件夹手动复制到x86文件夹。这样可以确保不容易犯错误。

此外,如果您仍然希望在VS中使用此自动选项,则可以在我们的User Voice Forum上提出功能请求。小组将认真考虑您的要求,并给您满意的答复。