为什么UWP应用程序无法使用引用经典.Net dll的PCL?

时间:2017-10-12 08:21:13

标签: .net uwp portable-class-library

我们有大量经典的.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库?

1 个答案:

答案 0 :(得分:1)

  

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

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