configuration - 选择要链接的程序集以使用配置 (MonoDevelop)

标签 configuration msbuild monodevelop .net-assembly

我正在使用 MonoGame 项目开发针对 Windows 和 Linux 的多平台游戏。我想要做的是能够使用相同的 .csproj 文件为任一目标构建,因为版本之间唯一会发生变化的是引用的程序集。具体来说,我需要根据目标平台链接到不同版本的 MonoGame 库。我在网上四处看看,似乎通过编辑 .csproj 文件应该很容易。所以我做了这样的事情:

<!-- System agnostic dependencies -->
<ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xml" />
    ...

</ItemGroup>

<!-- Linux system dependencies -->
<ItemGroup Condition=" '$(Configuration)'=='Linux' ">
  <Reference Include="MonoGame.Framework">
    <HintPath>..\Dependencies\Linux\MonoGame.Framework.dll</HintPath>
  </Reference>
</ItemGroup>

<!-- Windows system dependencies -->
<ItemGroup Condition=" '$(Configuration)'=='Windows' ">
  <Reference Include="MonoGame.Framework.Windows">
    <HintPath>..\Dependencies\Windows\MonoGame.Framework.Windows.dll</HintPath>
  </Reference>
</ItemGroup>

(为简洁起见省略其他依赖)

嗯,这根本行不通。我尝试在 Linux 配置下构建,它立即开始提示 MonoGame 程序集的命名空间中包含的所有类型都被定义了多次。显然这是真的,因为有两个版本的程序集,但据我了解,根据 .csproj 中的条件,它应该只尝试链接适当版本的程序集。我检查了输出目录,它甚至继续将任一配置的所有依赖项复制到输出中。所以很明显我在这里做错了什么。

我找到的在线文档表明 MonoDevelop 至少对 MSBuild 条件语句有一些支持,但我找不到更具体的内容。 MonoDevelop 根本不支持我正在尝试做的事情,或者我正在做一些非常愚蠢的事情。

我想如果我尝试做的事情不受支持,我总是可以重新编译 Windows 版本的 MonoGame 以使用不同的命名空间并做一些 hack-y,比如:

#ifdef __WINDOWS_VERSION__
#define Microsoft.Xna Microsoft.XnaWindowsVersion
#endif

...但话又说回来,这似乎是有罪的。关于我应该如何处理这件事有什么想法吗?

最佳答案

在标准 MSBuild 下,您可以使用 <choose> 解决此问题元素:

另请参阅:https://stackoverflow.com/a/1836417/736079

关于configuration - 选择要链接的程序集以使用配置 (MonoDevelop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18357967/

相关文章:

C# 一个项目可以有多个 .config 文件吗?

amazon-web-services - 通过 CloudFormation 在根卷的 AWS::EC2::Instances BlockStorage 上设置标签

visual-studio-2012 - 如何为 vcxproj 中的每个编译单元提取编译参数?

msbuild - 类型或命名空间名称 'WebApi' 在命名空间 'Microsoft.AspNet' 中不存在(是否缺少程序集引用?)

Debian mono 中 monodevelop 中的 MySQL.Data.dll 错误

ios - 带有 SDK 4.4 的 MonoTouch : how to run app in Simulator 6. 0?

c# - Linux + ARM + KINECT + C# + MonoDevelop,这可能吗?

CloudConfigurationManager 的 Python Azure SDK 等效项

c# - 如何使用配置管理器? (Microsoft.IdentityModel.Protocols)

c# - 带有 c# 和 f# 项目的根文件夹中的 Directory.Build.props 会导致问题