【问题标题】:How can I reference the solution's platform from a C# csproj file?如何从 C# csproj 文件中引用解决方案的平台?
【发布时间】:2013-06-27 22:03:16
【问题描述】:

我有一些构建为 AnyCPU 的 csproj 文件,这些文件附带一些为特定架构构建的本机组件。这些文件需要放在同一个位置,所以我想根据当前选择的平台和配置来设置输出目录:

<PropertyGroup>
  <OutputPath>$(SolutionDir)\bin\$(Configuration)_$(Platform)\</OutputPath>
</PropertyGroup>

不幸的是,因为这是在 AnyCPU 项目中,所以它没有生成 $(SolutionDir)\bin\Release_x64\ 的输出目录,而是生成了 $(SolutionDir)\bin\Release_AnyCPU 的输出目录。

我想避免制作这个库的新的位特定版本。我只是希望构建将文件放置在正确的位置。

csproj 如何知道整个构建的平台是什么?

【问题讨论】:

  • 澄清一下:您希望您的项目能够参考整体解决方案的平台?
  • @Simon:是的,没错。如果没有别的只是将文件复制到正确的位置。 (我可能会不理会 OutputPath 并执行构建后目标以复制到正确的位置,但这仍然需要整体解决方案中的平台/配置才能知道该位置)
  • 只是提醒一下,我认为 VS 不会开箱即用地处理这种情况。您可以手动编辑 .csproj 文件并使用 MSBuild 执行一些 hacky 命令行业务。我不确定这究竟意味着什么(MSBuild 并不是我真正的专业领域!)

标签: c# msbuild csproj


【解决方案1】:

$(Platform) 值与托管项目完全无关。它不会以任何方式影响项目的构建方式或运行方式。决定架构的是抖动,它发生在运行时,而不是构建时。

唯一具有任何效果的设置是项目+属性、构建选项卡、平台目标。此设置的值由 $(Platform) 确定。自 VS2010 以来,这引起了极大的混乱。

您现在应该看到了解决方案,因为平台名称无关紧要,您可以简单地将其与您的 C++ 项目的平台名称相同。如有必要,将 x64 和 Win32 配置添加到托管项目。并且删除 AnyCPU 配置,因为您不再需要它了。内置 + 配置管理器以确保所有项目使用相同的平台。问题解决了。

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多