2017-11-14 13 views
2

現在、XamarinプロジェクトをPCLから.NET標準2.0に移行しています。これはコアライブラリプロジェクト形式です。ほとんどのものがうまくいきます。我々は、ローカライズのためにコアプロジェクトでresx-filesを使用します。これはiOSとAndroidで正常に動作します。 UWPでXamarin.Forms .NetStandard 2.0とnullリソースを持つUWP

私は同じコードがうまく働いたPCLバージョン

var buttonText = AppResources.Cancel; // => null 

文字列ressourcesにアクセスしようとする場合、私は、値としてnullを取得します。いくつかの初期化が必要ですか?

デバッグ時に、リソースマネージャにnull ResourceSetがありますが、_WinRTResourceManagerが埋め込まれていることがわかります。

enter image description here

+1

'.NetStandard 2.0'で' Xamarin.Forms UWP'を作成しようとしましたが、問題を再現できず、 'AppResources'が私の側で動作します。この問題を再現できる簡単なサンプルを共有できましたか? –

+0

ありがとうございます。私は小さなテストアプリケーションを作成し、UWPが動作します。 'ResourceManager'は、フルアプリのように見えます(リソースセットの場合はnull、塗りつぶされたWinRTの場合はnull)。テストと完全なアプリケーションの違いが分かったら、私は解決策を書いてみましょう。 – WebDucer

+0

私はその理由を見つけました。ドイツ語(de-DE)をデフォルト言語として使用しています。 'Package.appxmanifest'のデフォルトのlangugageをデフォルト値' en-US'から 'de-DE'に変更すると、.Net標準ライブラリのリソースを読み込めませんでした。解決策は、.Net標準ライブラリ(UWPプロジェクトと同じ)の 'NeutralResourcesLanguage'をexplixitで定義することです。これは、手動で作成したAssemblyInfo.csで行うことができます(AssemblyInfoの自動生成をオフにすることを忘れないでください)。または、この情報を既存のclass {'assembly:NeutralResourcesLanguage(" de-DE ")]' – WebDucer

答えて

1

最後に、私はその理由を見つけました。

通常、PCLライブラリを.Net Standarに変換すると、ファイルAssemblyInfo.csは存在しません。したがって、中立的な言語定義は失われます。

ドイツ語(de-DE)をデフォルト言語として使用しています。 Package.appxmanifestのデフォルトlangugageをデフォルト値en-USからde-DEに変更すると、.NET標準ライブラリのリソースを読み取れませんでした。

解決策は、.Net標準ライブラリ(UWPプロジェクトと同じ)のNeutralResourcesLanguageをexplixitで定義することです。これは、手動で作成したAssemblyInfo.cs(AssemblyInfoの自動生成をオフにすることを忘れないでください)または[assembly: NeutralResourcesLanguage("de-DE")]を持つ既存のクラスの1つでこの情報を宣言することで行うことができます。

この修正の後、.NET標準ライブラリのリソースはUWPでも正しく使用されます。

関連する問題