Xamarin.Forms.Xaml.XamlParseException: MarkupExtension not found for trans: Translate with PCL in release mode

I am rather desperate to find a solution to the problem below.

I have a cross platform solution that has 4 projects,

3 OS Features | MyApp.android,
    MyApp.Winphone,
    MyApp.IOS
and PCL project
    MyApp.BLL

inside MyApp.BLLbll, I am using the MyApp namespace and at the root I have the TranslateExtension.cs class

namespace MyApp
{
    [ContentProperty("Text")]
    public class TranslateExtension: IMarkupExtension

{
    readonly CultureInfo ci;
    const string ResourceId = "MyApp.Resources.AppResource";

    public TranslateExtension()
    {
        ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
    }

    public string Text { get; set; }

    public object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Text == null)
            return "";

        ResourceManager resmgr = new ResourceManager(ResourceId
                            , typeof(TranslateExtension).GetTypeInfo().Assembly);

        var translation = resmgr.GetString(Text, ci);
        try
        {
        if (translation == null)
            {
#if DEBUG
                throw new ArgumentException(
                    String.Format("Key '{0}' was not found in resources '{1}' for culture '{2}'.", Text, ResourceId, ci.Name),
                    "Text");
#else
                translation = Text; // HACK: returns the key, which GETS DISPLAYED TO THE USER
#endif
            }
        }
        catch (Exception exp) {
        }
        return translation;
    }
}

      

inside Xamarin forms I use the following to enable translation for labels, etc.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.Views.RegisterWebServiceXaml"
             xmlns:trans="clr-namespace:MyApp;assembly=MyApp.BLL"
             IsBusy="{Binding IsWorking}"
             >

  <ContentPage.Content>
    <StackLayout Orientation="Vertical" VerticalOptions="FillAndExpand" Padding="0,75,0,0">
          <Entry Text="{Binding Path=OrganizationId, Mode=TwoWay}" Placeholder="{trans:Translate OrganizationId}" Style="{StaticResource LoginStyle}" />
          ...
          <Label Text="{trans:TranslateUpper Next}" x:Name="LoginLabel" HorizontalOptions="Center" Style="{StaticResource BasicLabel}" />
    </StackLayout>
  </ContentPage.Content>
</ContentPage>

      

It works like a charm using the debug modus module, but when I try to compile the Android solution in release mode my app suddenly stops right after loading a popup that says "MyApp has stopped"

while in the application output, I can find the following error message:

[Xamarin.Insights] Warning: Unhandled exception: Xamarin.Forms.Xaml.XamlParseException: MarkupExtension not found for trans:Translate
[Xamarin.Insights] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
[Xamarin.Insights] at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <0x0003f>
[Xamarin.Insights] at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <0x00027>
[Xamarin.Insights] at Java.Lang.Thread/RunnableImplementor.Run () <0x0003f>
[Xamarin.Insights] at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <0x0003b>
[Xamarin.Insights] at (wrapper dynamic-method) object.44dc0140-8f03-4bf1-a261-186aa2a7ef42 (intptr,intptr) <0x0003b>
[art] JNI RegisterNativeMethods: attempt to register 0 native methods for md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] Process: MyApp.MyApp, PID: 32091
[AndroidRuntime] java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
[AndroidRuntime]    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
[AndroidRuntime] Caused by: java.lang.reflect.InvocationTargetException
[AndroidRuntime]    at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime]    at java.lang.reflect.Method.invoke(Method.java:372)
[AndroidRuntime]    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
[AndroidRuntime]    ... 1 more
[AndroidRuntime] Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: Xamarin.Forms.Xaml.XamlParseException: MarkupExtension not found for trans:Translate
[AndroidRuntime] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
[AndroidRuntime] at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <0x0003f>
[AndroidRuntime] at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <0x00027>
[AndroidRuntime] at Java.Lang.Thread/RunnableImplementor.Run () <0x0003f>
[AndroidRuntime] at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <0x0003b>
[AndroidRuntime] at (wrapper dynamic-method) object.44dc0140-8f03-4bf1-a261-186aa2a7ef42 (intptr,intptr) <0x0003b>
[AndroidRuntime] 
[AndroidRuntime]    at mono.java.lang.RunnableImplementor.n_run(Native Method)
[AndroidRuntime]    at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)
[AndroidRuntime]    at android.os.Handler.handleCallback(Handler.java:739)
[AndroidRuntime]    at android.os.Handler.dispatchMessage(Handler.java:95)
[AndroidRuntime]    at android.os.Looper.loop(Looper.java:145)
[AndroidRuntime]    at android.app.ActivityThread.main(ActivityThread.java:5944)
[AndroidRuntime]    ... 4 more

      

Does any body have a solution to this problem? I can not find him. I've tried using multiple namespaces (MyApp.android, MyApp, MyApp.BLL, MyApp.MyApp) but so far I haven't found the correct one.

Why does this work in debug mode and not in Release / App Store mode?

+3


source to share


1 answer


Check project settings, make sure link is disabled or SDK-ony enter image description here.

If this is a "Referencing All Assemblies" and your code is getting too large without it, you can use the attribute [Preserve]

on your class instead .



See this page for more information on the Xamarin Linker

+7


source







All Articles