2017-10-12 101 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

相關問題