Visual Studio和NuGet在Linux上以Mono为目标

时间:2017-05-25 18:26:08

标签: visual-studio xamarin mono nuget

我构建了许多具有跨平台定位的软件包。我喜欢使用NuGet作为部署的所有显而易见的原因,但我很难理解我如何在Linux上为Mono定位特定的二进制文件。

作为一个例子,我有一个库,在Mono for Linux版本中,引用了`Mono.Posix.Helper.dll。这非常特定于Linux上的Mono。它不适用于桌面。它不适用于Android上的Mono或iOS上的Mono。同一个库有不同的桌面.NET,Windows CE上的.NET,Android上的Mono和iOS上的Mono。

似乎我需要两件事,我似乎无法找到:

  1. 一种告诉NuGet的方法,一组特定的二进制文件以Linux上的Mono为目标。我在official documentation of the NuGet schema target frameworks中看不到任何内容。
  2. 告诉Visual Studio我将使用这些二进制文件的项目的目标是Linux上的Mono。我找到了this nice list of project GUIDs但是,当然,Mono没有任何内容可以用于Android或iOS。
  3. 现在我用一个不太友好的构建后任务来解决这个问题,但是当我需要创建一个使用其中一个软件包的新项目时,这真的不好玩。

    我知道微软过去几年一直试图让Linux更加友好,但这似乎是一个非常大的漏洞。我不能成为这里唯一一个在Linux上为Mono构建代码的人,可以吗?这里有什么解决方案?

1 个答案:

答案 0 :(得分:1)

目前,这是不可能的。

NuGet(3. *,4)确实有"运行时"但那些是指"运行时"继续前进。因此,虽然您可以拥有linux-x64的特定资产,但这无法判断您是使用单声道还是.net核心。实际上,即使您使用net461目标框架和runtimes/linux-x64/lib/net461/linux-specific.dll文件,这甚至可以在.NET Core 2.0应用程序中使用,因为.NET Core 2.0可以使用net461 +库

目前唯一可行的方法是使用托管填充程序在运行时解析正确的程序集。这也将使消费项目“便携”#34; - 意思是它可以直接在windows上运行,也可以通过mono运行在Linux上,假设所有库都可以动态加载。