我非常绝望地找到了下面提到的问题的解决方案.
3个操作系统细节
MyApp.android,
MyApp.Winphone,
MyApp.IOS
和一个PCL项目
MyApp.BLL
在MyApp.BLLbll中,我正在使用MyApp命名空间,在根目录中我有TranslateExtension.cs类
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; } }
在Xamarin Forms中,我使用以下内容来启用标签的翻译等.
<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"> <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>
这就像使用调试模式的魅力一样,但是当我尝试在发布模式下编译Android解决方案时,我的应用程序在加载启动画面后突然停止,说明“MyApp已停止”
[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
有没有人能解决这个问题呢?我找不到它.我已经尝试使用几个名称空间(MyApp.android,MyApp,MyApp.BLL,MyApp.MyApp),但直到现在我还没找到合适的名称空间.
为什么这在调试模式下工作而不在发布/应用商店模式下?