我们有大量的经典.Net库,它们都是用.Net 3.5到4.6编写的。这包括我们使用WCF,Web API,Asp.Net,WPF和Windows Forms在各种.Net解决方案中使用的核心业务逻辑和数据模型类。因此,当考虑创建UWP应用程序时,我们需要重用其中一些.Net dll。为什么UWP应用程序不能使用引用经典.Net dll的PCL?
我创建了一个可移植的类库(PCL),其中我引用了我们的.NET 4.5 dll中的一个。然后,我在实现4.5类之一的PCL创建的类:
using DODServiceLib.Models;
namespace PortableClassLibrary
{
public class UtilityStats : ProcessorStats
{
}
}
ProcessorStats是从4.5 DLL,DODServiceLib.Models。
在我UWP的应用程序,我添加了一个项目参照PCL,PortableClassLibrary并添加using语句后面在我的代码,这是我需要用我的.NET类的实现:
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.Net.Http;
using System.Threading.Tasks;
using PortableClassLibrary;
namespace HelloWorld
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
var utilityStats = new UtilityStats();
}
}
}
在构建解决方案,我得到这些错误对UWP的HelloWorld应用程序:
Type universe cannot resolve assembly: DODServiceLib, Version=20.17.7.28, Culture=neutral, PublicKeyToken=null.
Cannot resolve Assembly or Windows Metadata file 'DODServiceLib.dll'
为什么UWP应用寻找到.NET的DLL(DODServiceLib)的参考,当它仅使用PCL?
我可以不使用这样的PCL作为经典.Net库的“包装器”吗?
问题是,我的.Net库使用实体框架连接到SQL Server数据库,我无法使EF在PCL中工作。我可以通过Nuget将EF添加到PCL,但是在添加新项目下没有实体数据模型类。然后发现另一篇文章说明System.Data不被PCL支持,因此在我看来,PCL是无用的,至少就数据访问而言。 – Neville
Windows 10秋季创作者更新(构建16299)UWP应用程序现在可以通过标准的.NET类(System.Data.SqlClient)直接访问SQL Server,因此,您可以使用这些API在PCL中创建自己的SQL帮助器类。请参阅此[线程](https://stackoverflow.com/questions/32885735/how-to-connect-to-sql-server-database-from-a-windows-10-uwp-app)以获取更多详细信息。 – Bite