Xamarin..迁移到.NET Standard 2.0失败



我正试图将我的PCL项目迁移到新的"网络标准",但目前我失败了。

目前我得到以下异常:

System.MissingMethodException: 'Method not found: 'Void Xamarin.Forms.Xaml.Internals.SimpleValueTargetProvider..ctor(System.Object[], System.Object, Xamarin.Forms.Internals.INameScope)'.'

它直接发生在页面的"InitializeComponent"中,我有以下xaml标记:

<Image Source="{ns_uc:ImageResource i_home_on.png}"/>

"ImageResource"是一个扩展标记,在我的PCL项目中,这个就像一个魅力。以下是定义的一部分:

public class ImageResourceExtension : IMarkupExtension

但是这个类不是从我的新.NET标准项目中调用的!

在.csproj中,我有以下引用,这应该足够了吗?

<PackageReference Include="System.ComponentModel" Version="4.3.0" />
<PackageReference Include="Xamarin.Forms" Version="3.4.0.1008975" />

所以,如果有人有一个想法,因为我已经在这个迁移中度过了2天,但没有成功:-(

顺便说一句,我似乎并不孤单:https://forums.xamarin.com/discussion/101999/cant-use-imarkupextension-in-a-net-standard-library

感谢您的帮助

1.System.ComponentModel在某些NetStandard版本中是一个NuGet包。如果它不存在,请尝试安装它。

2.您可以直接使用<Image Source="myImage.png"/>,而不是在.net标准项目中使用IMarkupExtension

3.ImageResourceExtension在PCL项目和.net标准2.0项目中的实现可能有所不同。这里有一个官方演示中的实现,你可以参考:

[ContentProperty("Source")]
class ImageResourceExtension : IMarkupExtension<ImageSource>
{
public string Source { set; get; }
public ImageSource ProvideValue(IServiceProvider serviceProvider)
{
if (String.IsNullOrEmpty(Source))
{
IXmlLineInfoProvider lineInfoProvider = serviceProvider.GetService(typeof(IXmlLineInfoProvider)) as IXmlLineInfoProvider;
IXmlLineInfo lineInfo = (lineInfoProvider != null) ? lineInfoProvider.XmlLineInfo : new XmlLineInfo();
throw new XamlParseException("ImageResourceExtension requires Source property to be set", lineInfo);
}
string assemblyName = GetType().GetTypeInfo().Assembly.GetName().Name;
return ImageSource.FromResource(assemblyName + "." + Source, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
}
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
return (this as IMarkupExtension<ImageSource>).ProvideValue(serviceProvider);
}
}

你可以参考下面的演示来修复你的项目。

参考:ImageResourceExtension 演示

标记扩展文档

我会遵循James Montemagno的步骤:

https://montemagno.com/how-to-convert-a-pcl-library-to-net-standard-and-keep-git-history/

我观看了Xamarin节目中的这段视频:https://channel9.msdn.com/Shows/XamarinShow/Snack-Pack-15-Upgrading-to-XamarinForms-to-NET-Standard

我第一次试了一下,结果失败得很惨。第二次转身时,我完全按照视频中的指示,一切都很顺利。

相关内容

  • 没有找到相关文章

最新更新