我的解决方案包括3个项目:
我的后端项目包含程序集My_Test_App(可移植)
My_Test_App.Android
My_Test_App.iOS
在后端项目中,我有这个XAML页面代码(请原谅名称)
<ContentPage
x:Class="My_Test_App.Pages.LoginPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:converters="clr-namespace:My_Test_App.Converters;assembly=My_Test_App"
xmlns:effects="clr-namespace:My_Test_App.Effects;assembly=My_Test_App"
xmlns:viewModels="clr-namespace:My_Test_App.ViewModels;assembly=My_Test_App"
xmlns:views="clr-namespace:My_Test_App.Views;assembly=My_Test_App">
<ContentPage.Resources>
<ResourceDictionary>
<converters:Converter1 x:Key="conv1" />
<converters:Converter2 x:Key="conv2" />
<converters:Converter3 x:Key="conv3" />
</ResourceDictionary>
</ContentPage.Resources>
</ContentPage>
它适用于Android和iPhone模拟器,但当我在真正的iPhone上测试它时,我收到此错误:
Xamarin.Forms.Xaml.XamlParseException: Position 13:14. Type converters:Converter1 not found in xmlns clr-namespace:My_Test_App.Converters;assembly=My_Test_App
我在后端项目中的Converter1代码:
namespace My_Test_App.Converters
{
public class Converter1: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool original = (bool)value;
return !original;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public My_Test_App()
{
}
}
}
你能帮忙吗?我在这里有一些怀疑:
对程序集名称进行下划线,但我需要保留当前的程序集名称..
在IOS项目属性中,我更改了iOS构建部分中的链接器选项&#34;仅限链接SDK&#34; to&#34;链接所有程序集&#34;。但是,如果我不改变它,我会收到错误&#34;无法进行组装.......&#34;
当前xamarin版本中可能出现的错误(我的是4.2.2.11)
感谢您帮助我!
答案 0 :(得分:2)
类型转换器:找不到Converter1
Xamarin链接器使用静态分析来确定可以从程序集中删除哪些IL
代码以减小大小以及Xamarin.Form
IValueConverter
基于PreserveAttribute
的类的反射调用似乎没有被使用。
在您的Xamarin.Forms(PCL)项目中,添加public sealed class PreserveAttribute : System.Attribute {
public bool AllMembers;
public bool Conditional;
}
类:
IValueConverter
现在将[Preserve] w / AllMembers属性添加到[Preserve(AllMembers = true)]
public class Converter1: IValueConverter
{
~~~
}
类,以通知链接器跳过此类:
import xml.etree.ElementTree as ET
tree = ET.parse("Parsed.xml")
doc = tree.getroot()
for elem in doc.findall('.//medicationsInfo/entryInfo/productCode/code'):
print (elem.text);
for elem in doc.findall('.//medicationsInfo/entryInfo/productCode/codeSystem'):
print (elem.text);
回复:https://developer.xamarin.com/guides/ios/advanced_topics/linker/