为什么 UWP 应用程序不能使用引用经典 .Net dll 的 PCL?
Why UWP app can not use PCL that references classic .Net dll?
我们拥有大量 classic .Net 库,使用 .Net 3.5 到 4.6 的任何版本编写。这包括我们使用 WCF、Web API、Asp.Net、WPF 和 Windows Forms 在各种 .Net 解决方案中使用的核心业务逻辑和数据模型 classes。因此,在考虑创建 UWP 应用程序时,我们需要重用其中一些 .Net dll 是很自然的。
我创建了一个可移植的 class 库 (PCL),我在其中引用了我们的 .Net 4.5 dll 之一。然后我在 PCL 中创建了一个 class 实现了 4.5 classes:
using DODServiceLib.Models;
namespace PortableClassLibrary
{
public class UtilityStats : ProcessorStats
{
}
}
ProcessorStats 来自 4.5 dll,DODServiceLib.Models。
在我的 UWP 应用程序中,我添加了对 PCL、PortableClassLibrary 的项目引用,并在后面的代码中添加了 using 语句,这是我需要使用我的 .Net class:
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 用作 classic .Net 库的 "wrapper" 吗?
Why is the UWP app looking for a reference to the .Net DLL (DODServiceLib) when it only uses the PCL?
这是正常的。您的 PCL 添加了对该 .NET DLL 的引用,因此它肯定会查找该 dll。但是 UWP 不支持这个 dll。这就是为什么你会得到例外的原因。 UWP 项目可以引用 Universal Windows Class Library、Portable Library 或 Windows Runtime Component.It 并不意味着您可以使用 PCL 来包装经典的 .NET library.That完全不同。我认为您需要做的是将 .NET 库中的所有代码复制到 PCL,然后开始 eliminate/replace 所有不适合的代码。
我们拥有大量 classic .Net 库,使用 .Net 3.5 到 4.6 的任何版本编写。这包括我们使用 WCF、Web API、Asp.Net、WPF 和 Windows Forms 在各种 .Net 解决方案中使用的核心业务逻辑和数据模型 classes。因此,在考虑创建 UWP 应用程序时,我们需要重用其中一些 .Net dll 是很自然的。
我创建了一个可移植的 class 库 (PCL),我在其中引用了我们的 .Net 4.5 dll 之一。然后我在 PCL 中创建了一个 class 实现了 4.5 classes:
using DODServiceLib.Models;
namespace PortableClassLibrary
{
public class UtilityStats : ProcessorStats
{
}
}
ProcessorStats 来自 4.5 dll,DODServiceLib.Models。
在我的 UWP 应用程序中,我添加了对 PCL、PortableClassLibrary 的项目引用,并在后面的代码中添加了 using 语句,这是我需要使用我的 .Net class:
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 用作 classic .Net 库的 "wrapper" 吗?
Why is the UWP app looking for a reference to the .Net DLL (DODServiceLib) when it only uses the PCL?
这是正常的。您的 PCL 添加了对该 .NET DLL 的引用,因此它肯定会查找该 dll。但是 UWP 不支持这个 dll。这就是为什么你会得到例外的原因。 UWP 项目可以引用 Universal Windows Class Library、Portable Library 或 Windows Runtime Component.It 并不意味着您可以使用 PCL 来包装经典的 .NET library.That完全不同。我认为您需要做的是将 .NET 库中的所有代码复制到 PCL,然后开始 eliminate/replace 所有不适合的代码。