首页 > 解决方案 > 在 Visual Studio 中引用一个项目并为特定平台构建它

问题描述

我有一个应该为 x86 构建的项目 A,它依赖于另一个为 x64 构建的项目 B。我当然可以按原样构建它,但我不希望出现运行时问题。

所以我的想法是设置项目 A,这样如果我想为 x86 构建它,我可以参考项目 B,但它是为 x86 构建的,如果我想为 x64 构建项目 A,那么我参考项目 B 但有它为 x64 构建。这可能吗?

我在项目 A 的 .csproj 中设置了一个条件,例如:

<ItemGroup Condition=" '$(Platform)' == 'x86' ">

    <ProjectReference Include="..\Project B\projB.csproj">
      <Project>{678c5dc7-7a1c-45g3-bffe-a4754c64f027}</Project>
      <Name>projB</Name>
    </ProjectReference>
</ItemGroup>

<!-- x64 specific referneces -->
<ItemGroup Condition=" '$(Platform)' == 'x64' ">

    <ProjectReference Include="..\Project B\projB.csproj">
      <Project>{678c5dc7-7a1c-45g3-bffe-a4754c64f027}</Project>
      <Name>projB</Name>
    </ProjectReference>
</ItemGroup>

但我不知道如何为特定平台构建引用的项目。我知道我可以只取两个版本的 .dll 并为正常引用应用条件,但想看看这是否可行。是否可以?我是否需要两个独立的相同项目但具有不同的目标平台才能做到这一点?

如果您能帮助我,将不胜感激,谢谢!

标签: c#visual-studiomsbuildcsproj

解决方案


在 Visual Studio 中引用一个项目并为特定平台构建它

项目参考是完全不同的。而您提供的是基于项目A在不同平台上构建项目。Project B不会根据A中的平台变化,使用对应版本的平台来构建 Project B。

Project Reference其实就是先构建项目B,再构建项目A 引用对应的项目B。它需要重新配置。

更新

在您的情况下,在构建项目A时,它有一个条件Condition=" '$(Platform)' == 'x86' ",它仅基于项目A的当前平台,但无法将此参数传递给项目B以将项目编译为x86。所以你应该

因此,您需要手动更改B的平台以实现您的目标。

解决方案

1) Build -->Configuration Manager并像这样进行更改以构建您的项目。

在此处输入图像描述

或者

在此处输入图像描述

2)用建项目Ax86,首先要把项目B改成x86平台,用 做同样的事情时x64,也要对项目 B 做同样的操作。

右键单击您的项目 A 和 B--> Properties--> Build--> 将平台目标更改为 x64 或 x86。

然后您可以在项目 A 的输出路径文件夹中获得相同的平台输出文件。

另外,您可以尝试同时基于x64x86平台构建项目B(可以参考此链接),然后使用项目A中的xml代码(根据x64或x86平台)来引用(程序集参考)对应项目B.dll。

希望它可以帮助你。


推荐阅读