Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio和NuGet在Linux上以Mono为目标_Visual Studio_Xamarin_Mono_Nuget - Fatal编程技术网

Visual studio Visual Studio和NuGet在Linux上以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有不同的实现 我似

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

例如,我有一个库,在Mono for Linux版本中,它引用了`Mono.Posix.Helper.dll。这对于Linux上的Mono非常特殊。它不是为桌面设计的。它不适用于Android上的Mono或iOS上的Mono。同一个库对桌面上的.NET、Windows CE上的.NET、Android上的Mono和iOS上的Mono有不同的实现

我似乎需要两样东西,但我似乎找不到:

  • 告诉NuGet一组特定的二进制文件针对Linux上的Mono的一种方法。我什么也没看到
  • 告诉VisualStudio我将使用这些二进制文件的项目以Linux上的Mono为目标的一种方法。我发现了,但是,当然,对于Mono来说,没有什么不是针对Android或iOS的
  • 现在我用一个不太友好的后期构建任务来解决这个问题,但是当我需要创建一个使用这些包中的一个的新项目时,这真的不是一件有趣的事情


    我知道微软在过去几年里一直在努力让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软件包的用户不必自己做任何事情,只需安装它即可。