C# 我可以在标准.Net应用程序中使用PCL库吗?

C# 我可以在标准.Net应用程序中使用PCL库吗?,c#,uwp,portable-class-library,C#,Uwp,Portable Class Library,我有PCL库,我想把它添加到标准的(.NET4.6)C#控制台应用程序中。只要我不在库中使用任何特定于PCL的类,一切都很好。如果我这样做,我会得到一个错误“不受支持的PCL配置文件”。这个错误是不可纠正的。但同样的库在UWP应用程序中工作良好。我正在寻找在非UWP应用程序中无法使用PCL的解决方案或官方解释。当然可以。 只需将.NET 4.6添加到选定的平台: 它在您创建PCL时显示。 更多信息请点击此处: 或者,您可以在现有PCL中更改平台。只需转到“属性”页面,您将看到: 下面是一篇

我有PCL库,我想把它添加到标准的(.NET4.6)C#控制台应用程序中。只要我不在库中使用任何特定于PCL的类,一切都很好。如果我这样做,我会得到一个错误“不受支持的PCL配置文件”。这个错误是不可纠正的。但同样的库在UWP应用程序中工作良好。我正在寻找在非UWP应用程序中无法使用PCL的解决方案或官方解释。

当然可以。 只需将.NET 4.6添加到选定的平台:

它在您创建PCL时显示。
更多信息请点击此处:

或者,您可以在现有PCL中更改平台。只需转到“属性”页面,您将看到:

下面是一篇关于如何从桌面应用程序调用UWP API的好博文:
当然可以。 只需将.NET 4.6添加到选定的平台:

它在您创建PCL时显示。
更多信息请点击此处:

或者,您可以在现有PCL中更改平台。只需转到“属性”页面,您将看到:

下面是一篇关于如何从桌面应用程序调用UWP API的好博文:

是的,你可以。PCL基本上是不同平台上可用API的交叉点。缺点是,选择的目标平台越多,交叉点越小:

PCL的另一个缺点是,它为每个平台生成单独的组件

这就是微软推出.NET标准的原因——它取代了使用不同方法的PCL

将.NET标准视为一个接口,它定义了一组API。然后像.NET Framework、.NET Core、Xamarin.iOS、Xamarin.Android这样的平台将实现.NET标准

interface NetStandard1_0 {
}

interface NetStandard1_1 : NetStandard1_0{
}

interface NetStandard1_2 : NetStandard1_1{
}

net46: NetStandard1_6 {
}

dnxcode46: NetStandard1_6 {
}
因此,您的目标不是特定的平台,而是.NET标准的一个版本。当您的库以.NET标准为目标时,它可以用于实现.NET标准的任何平台。另一个优点是,对于不同的平台,您不再需要单独的程序集。将有一个程序集在任何地方运行


但是,我建议您等到2017年4月发布.NET标准2.0。微软承诺所有平台(.NET Framework、.NET Core、Xamarin.iOS、Xamarin.Android)都将支持此版本的.NET标准,并将在visualstudio中获得官方支持。此外,使用project.json的Visual Studio项目将转换为.csproj,因此所有Visual Studio项目都将使用相同的格式,这将解决许多兼容性问题。清理.NET去年出现的混乱是绝对必要的

是的,你可以。PCL基本上是不同平台上可用API的交叉点。缺点是,选择的目标平台越多,交叉点越小:

PCL的另一个缺点是,它为每个平台生成单独的组件

这就是微软推出.NET标准的原因——它取代了使用不同方法的PCL

将.NET标准视为一个接口,它定义了一组API。然后像.NET Framework、.NET Core、Xamarin.iOS、Xamarin.Android这样的平台将实现.NET标准

interface NetStandard1_0 {
}

interface NetStandard1_1 : NetStandard1_0{
}

interface NetStandard1_2 : NetStandard1_1{
}

net46: NetStandard1_6 {
}

dnxcode46: NetStandard1_6 {
}
因此,您的目标不是特定的平台,而是.NET标准的一个版本。当您的库以.NET标准为目标时,它可以用于实现.NET标准的任何平台。另一个优点是,对于不同的平台,您不再需要单独的程序集。将有一个程序集在任何地方运行


但是,我建议您等到2017年4月发布.NET标准2.0。微软承诺所有平台(.NET Framework、.NET Core、Xamarin.iOS、Xamarin.Android)都将支持此版本的.NET标准,并将在visualstudio中获得官方支持。此外,使用project.json的Visual Studio项目将转换为.csproj,因此所有Visual Studio项目都将使用相同的格式,这将解决许多兼容性问题。清除去年.NET中出现的混乱是绝对必要的

您的PCL库针对的是哪个PCL配置文件?@AndersGustafsson I针对的是Windows 8.1和Windows Phone 8.1。正如Alexej Sommer所指出的,我在目标框架中添加了.Net Framework 4.5.1,但它似乎使我的大多数命名空间不兼容(请参见Alexej回答下面的注释)。您下面列出的那些命名空间在.Net中不可用。因此,如果创建包含.NET的PCL库,它们也不会显示。对于要包含在PCL配置文件中的命名空间、类型或方法,它必须在PCL配置文件所针对的所有平台上都可用。好的,谢谢。我忽略了PCL只是一种限制机制的概念。似乎我必须重写库才能与.NET framework兼容,或者我必须制作Windows 8或UWP应用程序,而不是.NET framework应用程序。真是一团糟。非常感谢。您的PCL库针对的是哪个PCL配置文件?@AndersGustafsson I针对的是Windows 8.1和Windows Phone 8.1。正如Alexej Sommer所指出的,我在目标框架中添加了.Net Framework 4.5.1,但它似乎使我的大多数命名空间不兼容(请参见Alexej回答下面的注释)。您下面列出的那些命名空间在.Net中不可用。因此,如果创建包含.NET的PCL库,它们也不会显示。对于要包含在PCL配置文件中的命名空间、类型或方法,它必须在PCL配置文件所针对的所有平台上都可用。好的,谢谢。我忽略了PCL只是一种限制机制的概念。似乎我必须重写库才能与.NET framework兼容,或者我必须制作Windows 8或UWP应用程序,而不是.NET framework应用程序。真是一团糟。非常感谢。阿列克谢,谢谢你,我认为这是正确的。我的目标是Windows8.1和WindowsPhone8.1。正如您所指出的,我添加了.NETFramework4.5.1,但现在我的库构建失败-大多数名称空间都找不到,包括