2017-01-07 53 views
2

發現我有一個Visual Studio溶液,其具有2 C#項目:Xamarin XAML:類型不從外部組件

  1. 一個C#便攜式BasicLib;

  2. a C#portable XAML project

我定義的資源文件,並在BasicLib公共LocalizedStrings類。它的命名空間是「PL.Common.BasicLib」,程序集名稱是「PL.Common.BasicLib.dll」。

LocalizedStrings.cs

namespace PL.Common.BasicLib 
{ 
    /// <summary> 
    /// Provides access to string resources. 
    /// </summary> 
    public class LocalizedStrings 
    { 
     private static AppResources _localizedResources = new AppResources(); 

     public AppResources LocalizedResources { get { return _localizedResources; } } 
    } 
} 

然後我從XAML項目這個PL.Common.BasicLib添加引用。到現在爲止還挺好。我雙擊XAML項目的「References」節點中的程序集名稱,我可以在Visual Studio的「Object Browser」的「PL.Common.BasicLib」下看到類型「LocalizedStrings」。現在

,我希望把這種資源到App.xaml作爲應用程序資源以這樣的方式

的App.xaml

<?xml version="1.0" encoding="utf-8" ?> 
<Application xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:basiclib="clr-namespace:PL.Common.BasicLib;assembly=PL.Common.BasicLib" 
      x:Class="PL.Common.Xaml.App"> 

    <Application.Resources> 
    <basiclib:LocalizedStrings x:Key="LocalizedStrings"/> 
    </Application.Resources> 
</Application> 

生成解決方案,沒有任何問題。當運行它時,會出現錯誤:

Xamarin.Forms.Xaml.XamlParseException: Position 8:6. 
Type basiclib:LocalizedStrings not found in xmlns clr-namespace:PL.Common.BasicLib;assembly=PL.Common.BasicLib 

有人可以幫忙看看錯誤在哪裏嗎?

謝謝!

+0

你能否詳細說明你爲什麼要做這個結構?通常情況下,你會把你的本地化資源放到你的'Xamarin.Forms'項目的'PCL'中。 – Demitrian

+0

我有類似的問題。你有沒有解決這個問題? – AbsoluteSith

+0

你有沒有得到這個錯誤的解決方案?我也面臨同樣的問題。 –

回答

1

這可能與一個已知的鏈接問題有關 - Xamarin編譯器最終會鏈接出僅在XAML中引用的類(來自外部程序集)。

有幾個鏈接,談這個:

  1. Extending Control plugins>入門
  2. Force assembly linking

有很多的選項,以解決此問題:

  1. 在提到的每個類中添加一個靜態Init方法在這裏D 「入門」 部分here

    // this ensures the class does not get 
    // linked out in the application we add this assembly to. 
    public static void Init() { } 
    
  2. 或者,使用保存在Android保留屬性代碼,iOS

    public class Example 
    { 
        [Android.Runtime.Preserve] 
        public Example() 
        { 
        } 
    } 
    
  3. 或者,使用Custom linking

  4. 或者,更新項目配置爲不鏈接。 AndroidiOS。雖然不是推薦的選項。