2017-10-12 58 views
1

我们有大量的经典.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库的“包装器”吗?

回答

1

为什么UWP应用程序只在使用PCL时寻找对.Net DLL(DODServiceLib)的引用?

这很正常。你的PCL添加了对.NET DLL的引用,所以它肯定会查找这个DLL。但是这个DLL不支持UWP。这就是为什么你会得到例外。 UWP项目可以引用通用Windows类库,便携库或Windows运行时组件。它并不意味着您可以使用PCL来包装传统的.NET库。这完全是另一回事。我认为你需要做的是将.NET库中的所有代码复制到PCL中,然后开始消除/替换所有不适合的代码。

+0

问题是,我的.Net库使用实体框架连接到SQL Server数据库,我无法使EF在PCL中工作。我可以通过Nuget将EF添加到PCL,但是在添加新项目下没有实体数据模型类。然后发现另一篇文章说明System.Data不被PCL支持,因此在我看来,PCL是无用的,至少就数据访问而言。 – Neville

+1

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

相关问题