我正在尝试在Xamarin.Forms项目中创建和使用DLL。这是在Charles Petzold的书“使用Xamarin.Form创建移动应用程序”中给出的。 它提供了以下方法来访问我创建的库
"从应用程序解决方案的PCL项目中,添加对库PCL程序集的引用,该程序集是从库项目生成的动态链接库"
我的图书馆项目是这个
FILE:HslColorExtension.cs
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Xamarin.FormsBook.Toolkit
{
public static class Toolkit
{
public static void Init()
{
}
}
public class HslColorExtension : IMarkupExtension
{
public HslColorExtension()
{
}
public double H { set; get; }
public double S { set; get; }
public double L { set; get; }
public double A { set; get; }
public object ProvideValue(IServiceProvider servicePRovider)
{
return Color.FromHsla(H, S, L, A);
}
}
}
实际项目是CustomExtensionDemo 因为MainPage.xaml是
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="clr-namespace:Xamarin.FormsBook.Toolkit;assemby=Xamarin.FormsBook.Toolkit"
x:Class="CustomExtensionDemo.MainPage">
<StackLayout>
<Label Text="UTKARSH">
<Label.BackgroundColor>
<toolkit:HslColorExtension H="0" S="1" L="0.5"/>
</Label.BackgroundColor>
</Label>
</StackLayout>
</ContentPage>
我如何将DLL添加到应用程序中的方法 从图书馆发现了生成DLL的路径 C:\用户\ ADMIN \桌面\ Xamarin.FormsBook.Toolkit \ Xamarin.FormsBook.Toolkit \ OBJ \调试 DLL的名称是 Xamarin.FormsBook.Toolkit.dll
我添加了对实际项目的引用。浏览了一条路 C:\用户\ ADMIN \桌面\ Xamarin.FormsBook.Toolkit \ Xamarin.FormsBook.Toolkit \ OBJ \调试 并添加了DLL:Xamarin.FormsBook.Toolkit.dll
所有内容都正确编译但我在Android手机上获得了完整的白屏。 要点: 的 1。我已将MainPage.xaml设置为App.xaml.cs中的MainPage。。我试图将Label放在没有属性元素语法的情况下,并且有效。
我还没有检查iOS我觉得它会遇到同样的问题,因为问题可能出在应用程序中使用DLL的方法中。 IDE:VS 2017
现在我需要一些方法来移除&#34; Windows Phone Silverlight 8.1&#34;并且它没有提供删除选项。
答案 0 :(得分:0)
我很确定你的问题是你的PCL目标不兼容。
不是通过浏览DLL添加引用,而是通过选择项目来添加它。此方法将检查DLL的兼容性。很可能你需要改变目标,愚弄nuget等等。
其次我建议你的第一个测试平台是UWP。在UWP上似乎有更好的诊断。当我尝试你的代码时,我在Android上获得了白屏,但是当使用UWP作为平台时,我得到了一个异常,表示在DLL中找不到HslColorExtension。
答案 1 :(得分:0)
如果您按照这些步骤操作,它应该适合您:
xmlns:toolkit="clr-namespace:Xamarin.FormsBook.Toolkit;assemby=Xamarin.FormsBook.Toolkit"
为了确保我们开始干净,让我们创建一个新的Xamarin.FormsBook.Toolkit项目并摆脱你一直在使用的项目:
a)复制你已编写的代码,这样你就不会丢失它。
b)创建一个新的Xamarin.FormsBook.Toolkit项目,并且仅针对那些你可以使用这个工具包的平台。例如,你永远不会在Silverlight中使用它,因为你将引用特定的IMarkupExtension Xamarin表格。
c)从Xamarin Forms PCL项目中添加对Toolkit项目的引用(看起来你正在调用“CustomExtensionDemo”)。不要引用.dll而是引用项目本身。这将使您免于其他的麻烦。
d)将您的HslColorExtension文件(以及您拥有的任何其他类)复制回新项目。
e)将Xamarin.Forms Nuget包添加到您的Xamarin.FormsBook.Toolkit PCL,并在HslColorExtension文件的顶部添加“使用Xamarin.Forms”行,以便它识别IMarkupExtension接口。
< / LI>将一个空的Init函数(或任何你想要的函数)添加到你的HslColorExtension类,然后从你的App.xaml.cs中调用它。由于XAML是在运行时加载的,因此在XAML中有一个程序集引用这一事实会“唤醒编译器/链接器”。看起来似乎有点不自然,但是你可以在你的App.xaml.cs中丢掉那个丑陋的东西,你再也不用看了。如果你很好奇并希望看到发生了什么,请尝试在调用Init的情况下运行它,并查看Android项目的bin / Debug文件夹。当您调用Init时,您将看到您的Xamarin.FormsBook.Toolkit.dll出现在该文件夹中。如果你不打电话给Init,它就不会把你的组件拉进来。这是核心问题。
您生成的标记扩展代码如下所示:
public class HslColorExtension : IMarkupExtension { public static void Init() { } public double H { set; get; } public double S { set; get; } public double L { set; get; } public double A { set; get; } public object ProvideValue(IServiceProvider serviceProvider) { return Color.FromHsla(H, S, L, A); } }
你的App.xaml.cs是这样的:
public partial class App : Application { public App() { HslColorExtension.Init(); InitializeComponent(); MainPage = new MainPage(); } ... }
如果这不能解决,请告诉我! : - )