我们有大量经典的.Net库,用.Net 3.5到4.6编写。这包括我们使用WCF,Web API,Asp.Net,WPF和Windows Forms在各种.Net解决方案中使用的核心业务逻辑和数据模型类。因此,在研究创建UWP应用程序时,我们需要重用其中一些.Net dll。
我创建了一个便携式类库(PCL),我在其中引用了一个.Net 4.5 dll。然后我在PCL中创建了一个实现4.5类之一的类:
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应用只在使用PCL时才会寻找对.Net DLL(DODServiceLib)的引用?
我是否可以不使用这样的PCL作为"包装"对于经典的.Net库?
答案 0 :(得分:1)
为什么UWP应用只在使用PCL时才会寻找对.Net DLL(DODServiceLib)的引用?
这是正常的。您的PCL添加了对该.NET DLL的添加引用,因此它肯定会查找此dll。但这个dll在UWP中并不支持。这就是为什么你会得到例外的原因。 UWP项目可以引用通用Windows类库,可移植库或Windows运行时组件。这并不意味着您可以使用PCL来包装经典的.NET库。这是完全不同的事情。我认为您需要做的是将.NET库中的所有代码复制到PCL中,然后开始消除/替换所有不适合的代码。