C# 如何从.NET核心库引用Windows.winmd?
我希望使用.NET核心库中的Windows运行时类型,如C# 如何从.NET核心库引用Windows.winmd?,c#,.net,windows-runtime,asp.net-core,dnx,C#,.net,Windows Runtime,Asp.net Core,Dnx,我希望使用.NET核心库中的Windows运行时类型,如框架或按钮。当我使用传统的PCL,针对Windows/WindowsPhone8.1时,它似乎工作得很好。然而,由于某种原因,在我将项目切换到DNX之后,它就不再编译了 这是我的project.json: { "frameworks": { // Profile32 == Windows + Windows Phone 8.1 ".NETPortable,Version=v4.6,Profile=Pr
框架
或按钮
。当我使用传统的PCL,针对Windows/WindowsPhone8.1时,它似乎工作得很好。然而,由于某种原因,在我将项目切换到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>();
}
}
不幸的是,这似乎也不起作用,尽管编译器在解析像System.Linq
或System.Runtime
这样的程序集时没有问题
配置文件32的目标是“Windows 8.1、Windows Phone 8.1”(=平台标准1.2)
标准越低,可以使用类库的平台就越多,但它们的特性最少。标准越高,可以使用的功能就越多,但平台可能会受到限制
因此,如果您想在“类库(包)”中支持/使用winmd,则需要使用net(针对完整的.net framework时)和dotnet(针对.net核心框架时)名字对象
从上面的.NET平台标准链接:
VS2013和VS2015中的现有PCL项目(不包括UWP目标)只能针对.NET平台标准版本1.2
我不确定这是否也适用于.winmd文件。但您可以尝试将.NET核心的dotnet51
、dotnet52
或dotnet53
作为目标。您不能使用.NET 4.6(dotnet54
和dotnet55
名字对象)而仍然以Windows 8.1为目标,这只适用于UWP。根据a的说法,这些版本被关闭了一个(因此dotnet51
等于netstandard1.0
和dotnet5.5
等于netstandard1.4
)
名字对象的名称似乎适用于即将发布的ASP.NET Core 1.0 RC2版本,而对于当前的RC1,您可能仍然需要应用dotnet
名字对象
当然,您可以针对多个框架(对于每个定义的框架,将编译一个程序集),但您必须使用预处理器指令从代码中删除winmd/win8.1类,并将其替换为在较新平台上工作的类
请记住,对于类库(包),您必须使用名字对象,而对于.NET核心应用程序和测试项目,您仍然使用“dnx”和“dnxcore”
现在是一团糟,但下一次RC2应该会更好。。。我希望我找到了答案 诀窍是将您的项目基于csproj而不是xproj,您可以通过以下步骤来完成 完成此操作后,只需转到项目的属性并将库重新定位到Windows 8.1和Windows Phone 8.1。然后,您将看到Windows的小组装图标弹出,如下所示:
在
netcoreapp3.0
库中添加对Microsoft.Windows.SDK.Contracts
的引用。
".NETPortable,Version=v4.6,Profile=Profile32": {
"frameworkAssemblies": {
"Windows": { "type": "build" }
}
}