Visual studio Visual Studio和NuGet在Linux上以Mono为目标
我构建了许多具有跨平台目标的软件包。出于所有明显的原因,我喜欢使用NuGet作为部署,但我很难理解如何在Linux上为Mono定位特定的二进制文件 例如,我有一个库,在Mono for Linux版本中,它引用了`Mono.Posix.Helper.dll。这对于Linux上的Mono非常特殊。它不是为桌面设计的。它不适用于Android上的Mono或iOS上的Mono。同一个库对桌面上的.NET、Windows CE上的.NET、Android上的Mono和iOS上的Mono有不同的实现 我似乎需要两样东西,但我似乎找不到:Visual studio Visual Studio和NuGet在Linux上以Mono为目标,visual-studio,xamarin,mono,nuget,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有不同的实现 我似
我知道微软在过去几年里一直在努力让Linux更加友好,但这似乎是一个相当大的漏洞。我不是这里唯一一个在Linux上为Mono编写代码的人,对吗?这里的解决方案是什么?目前,这是不可能的 NuGet(3.*,4)确实有“运行时”的概念,但这些是指“运行时”运行的操作系统。因此,虽然您可以为
linux-x64
拥有特定的资产,但这无法判断您是使用mono还是.net core。事实上,即使将net461
目标框架与runtimes/linux-x64/lib/net461/linux-specific.dll
文件一起使用,由于.NET Core 2.0可以使用net461
+库,因此这甚至可以在.NET Core 2.0应用程序中使用
目前唯一可行的方法是使用托管垫片在运行时解析正确的程序集。这也将使消费项目“可移植”——这意味着它可以直接在windows上运行,也可以通过mono在linux上运行,前提是所有库都可以动态加载。Ugh。不幸的是,这是我期望听到的——虽然不是我真正想听到的。也许有一天微软会得出结论,是的,我们确实使用了这些东西并添加了支持。在创建mono目标框架时存在一个问题,但除此之外,只有Xamarin目标框架标识符。能否将生成后任务转换为具有关联的.targets文件的MSBuild任务,然后将其包含在NuGet包中?安装NuGet包时,MSBuild.targets文件将导入到项目中。因此,NuGet软件包的用户不必自己做任何事情,只需安装它即可。