Xamarin ... не удалось перейти на .NET Standard 2.0 - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь перенести свой проект 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 Standard!

В .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

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я бы пошел по стопам Джеймса Монтемагно:

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

Я попробовал его самостоятельносначала обойти и с треском провалился.Во второй раз я точно следовал инструкциям из видео, и все заработало.

0 голосов
/ 04 декабря 2018

1.System.ComponentModel - это пакет NuGet в некоторых версиях NetStandard. Попробуйте установить его, если он не существует.

2.Вы можете использовать <Image Source="myImage.png"/> напрямую вместо использования IMarkupExtension вСтандартный проект .net.

3. Реализация ImageResourceExtension может отличаться в проектах PCL и .net standard 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

Документы расширений разметки

...