是否可以在通用应用程序中使用具有本地化资源的可移植库?

时间:2014-10-07 14:35:55

标签: visual-studio-2013 windows-phone-8.1 win-universal-app

(问题的重新解决方案底部有一个链接。)

我一直在使用带有.resx资源的便携式库,因为它适用于Windows应用商店应用和Windows Phone应用。我尝试将它与通用应用程序一起使用,它适用于Windows应用商店部分,但不适用于Windows Phone。

仅当我尝试在设备上部署应用程序(使用Release配置构建)时,才会出现此问题。如果我只是构建它,它不会给出错误(但它仍然无法成功部署在设备上)。我收到以下错误:

Error : DEP6810 : MdilXapCompile.exe failed with error code 1004. See log file
'...\Phone App Test\Phone App Test\obj\Release\MDIL\MDILXapCompileLog.txt' for more details.

在那个文件中:

Error: Compile filter argument specified non-existent file:
...\Phone App Test\Phone App Test\obj\Release\MSIL\en-US\PCL.resources.dll
Invalid argument

该文件确实不存在,但该应用程序不支持en-US文化,只有库才有,所以我认为不需要这个文件。

知道如何解决这个问题吗?

以下是问题的简单解决方案:link

6 个答案:

答案 0 :(得分:3)

不幸的是,Phil Hoff blog中描述的解决方法对我来说并不适用。我已经开发了自己的解决方法。事实证明,如果您使用.resx文件仅存储字符串值,那么您可以轻松地将它们转换为.resw并在Windows Phone 8.1中本机使用。

所以我正在做的是从PCL复制和转换资源,并使用我制作的工具ResxHell自动将每个版本的Windows Phone项目放置在Windows Phone项目中。只需按照存储库中的说明操作,即可访问此类资源

var resourceLoader = new ResourceLoader();
var localizedText = resourceLoader.GetString("MyCustomReswFile/MyStringId");

为了更好的绑定,我最终创建了ValueConventer和小型本地化助手类,看看这个要点:Binding from .resw files example

使用它可以在xaml页面中执行以下操作:

//For resource in file Page.Login.resw and string ID "NotUserYet"
<TextBlock Text="{Binding ConverterParameter=Page.Login/NotUserYet, Converter={StaticResource ResString}, Mode=OneWay, Source={StaticResource ResString}}"/>

string localizedtext = LocalizationHelper.GetString("MyCustomReswFile", "MyStringId");

答案 1 :(得分:1)

答案 2 :(得分:1)

你可以在pcls中​​拥有.resx文件,你只需要使用http://blogs.msdn.com/b/philliphoff/archive/2014/11/19/missingmanifestresourceexception-when-using-portable-class-libraries-in-winrt.aspx上解释的解决方法

即使使用最新的VS 2013(更新5),尝试部署Release软件包时也会出现mdil错误。

  

MdilXapCompile.exe失败,错误代码为1004

要解决此问题,您必须使用store选项编译应用程序,然后使用Application Deployment工具将其实际部署到设备。

答案 3 :(得分:0)

你当然没有选中&#34; Build&#34; Configuration Manager中的复选框,这就是不自动复制资源的原因。检查它,它会工作。

答案 4 :(得分:0)

最后,似乎您不能在通用应用程序的WP部分中使用.resx文件将PCL库与本地化资源一起使用。至少它不是微不足道的。

当应用程序在Realese配置中构建时存在运行时问题,我无法解决,所以我决定更改为.resw资源。当然,这解决了我的问题,但我不得不复制资源,这是我试图避免的。

答案 5 :(得分:0)

有同样的问题。我尝试通过Windows Phone部署工具进行部署,但它确实有效。 因此,不要使用Visual Studio来部署:创建包并将它们放在手机上,它可以工作!!