繁体   English   中英

如何从.NET Core库引用Windows.winmd?

[英]How to reference Windows.winmd from a .NET Core library?

我希望使用.NET Core库中的Windows运行时类型,例如FrameButton 当我使用针对Windows / Windows Phone 8.1的传统PCL时,它似乎运行良好。 但是由于某种原因,在我将项目切换到DNX之后,它没有编译。

这是我的project.json

{
    "frameworks": {
        // Profile32 == Windows + Windows Phone 8.1
        ".NETPortable,Version=v4.6,Profile=Profile32": { }
    }
}

这是我的示例代码:

using System.Linq;
using Windows.UI.Xaml.Controls;

public class Sample
{
    public void Method()
    {
        Enumerable.Empty<Frame>();
    }
}

我在此代码段中收到有关Frame的编译器错误,说找不到类型。 因此,我对此进行了一些侦探工作,并在我的常规PCL中将其击中了F12,以查看其声明程序集。

事实证明,我想要的大多数Windows运行时类型都位于一个名为Windows.winmd程序集中,该程序集可在程序文件中找到。 我很好奇,我可以通过.NET Core库引用此程序集吗?

谢谢!

(请注意,我不能只使用常规PCL,因为我有特定于.NET Core的需求。)


meta:顺便说一句,请不要从这个问题中删除asp.net-core标记,因为这与DNX有关。


编辑:我刚刚尝试过:

".NETPortable,Version=v4.6,Profile=Profile32": {
    "frameworkAssemblies": {
        "Windows": { "type": "build" }
    }
}

不幸的是,尽管编译器在解析诸如System.LinqSystem.Runtime类的程序集时都没有问题,但这似乎也不起作用。

框架标记(TFM)有点令人困惑。

配置文件32的目标是“ Windows 8.1,Windows Phone 8.1”(= 1.2的平台标准)。

标准越低,平台可以使用的类库越多,但功能最少。 标准越高,可以使用的功能越多,但是平台可能会受到限制。

因此,如果要在“类库(程序包)”中支持/使用winmd,则需要使用net(当针对完整的.NET框架时)和dotnet(当针对.NET核心框架时)绰号。

通过上面的.NET平台标准链接:

VS2013和VS2015中的现有PCL项目(​​不包括UWP目标)只能定位到.NET Platform Standard 1.2以下版本。

我不确定这是否也适用于.winmd文件。 但是您可以尝试将.NET Core定位为dotnet51dotnet52dotnet53 您不能使用.NET 4.6( dotnet54dotnet55绰号),但仍以Windows 8.1为目标,这仅适用于UWP。 根据Marc Garvell帖子,版本之间dotnet51一个(因此dotnet51等于netstandard1.0dotnet5.5等于netstandard1.4

似乎这些名称的名称适用于即将发布的ASP.NET Core 1.0 RC2版本,而对于当前的RC1,您可能仍必须应用dotnet

当然,您可以针对多个框架(对于定义的每个框架,将编译一个程序集),但是您必须使用预处理程序指令从代码中删除winmd / win8.1类,并用在较新的平台。

请记住,对于类库(包),您必须使用“ net”和“ dotnet”绰号,而对于.NET Core应用程序和测试项目,您仍应使用“ dnx”和“ dnxcore”。

现在是一团糟,但是下一个RC2应该会更好...我希望

好吧,看来我找到了答案。

诀窍是使您的项目基于csproj而不是xproj,您可以按照此处的步骤进行操作。

完成此操作后,只需转到项目的属性,然后将库重新定位到Windows 8.1和Windows Phone 8.1。 然后,您将看到弹出用于Windows的小程序集图标,如下所示:

netcoreapp3.0库中添加对Microsoft.Windows.SDK.Contractsnetcoreapp3.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM