2014-10-07 47 views
11

(有在底部的问题的清样的解决方案的链接。)是否可以在通用应用程序中使用具有本地化资源的便携式库?

我一直在使用的.resx与资源的便携式库相当长的一段时间,因为它的工作对Windows Store应用程序和Windows Phone应用。我也尝试将它与通用应用一起使用,它适用于Windows应用商店部分,但不适用于Windows Phone。

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

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

+1

你有没有找到解决这个问题的办法? – 2014-10-28 23:04:34

+0

@MartinSuchan没有一个真正的解决方案,只有一个解决方法(虽然还没有完全测试,但它似乎工作)。我只是手动复制它所期望的程序集。我们将在本周发布应用程序,因此在最终测试结束后,如果一切正常,我会将其作为答案发布。可能有更好的解决方案,但在解决问题的时候我找不到它。 – yasen 2014-10-29 09:24:58

+0

对我们来说,这同样发生在Visual Studio 2015上。神奇的是,它与Visual Studio 2013一起工作良好。 – Amenti 2015-08-16 17:22:54

回答

1

您可以.resx文件中PCLS,你只需要使用变通方法上http://blogs.msdn.com/b/philliphoff/archive/2014/11/19/missingmanifestresourceexception-when-using-portable-class-libraries-in-winrt.aspx

解释即便使用最新的VS 2013(更新5)尝试部署发布包时,MDIL错误就会出现。

MdilXapCompile.exe failed with error code 1004

要解决它,你必须使用存储选项编译应用程序,然后使用应用程序部署工具,实际上它部署到设备中。

0

你肯定取消选中“生成”复选框,在Configuration Manager,这就是为什么资源不会自动复制。检查它,它会起作用。

+0

感谢@Poppyto的建议,但没有 - 那不是问题所在。我仍然不知道为什么他们需要摆在首位,也不知道为什么他们不被复制。无论如何,即使我手动复制它们,由于某种原因,该应用程序在Release中不起作用,所以我切换到.resw资源和Universal Class Library。 – yasen 2014-11-14 14:41:06

+0

你是没事的,我终于也切换到resw(实际上我只是将MSBUILD任务中的resx重命名为temp resw,所以我可以在我的WP7/8项目中使用我的resx) – Poppyto 2014-11-14 16:50:42

+0

@Poppyto你能解释你是如何重命名MSBuild任务上的文件? – Greg 2016-01-07 15:34:05

0

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

当应用程序在Realese配置中生成时,我遇到了运行时问题,我无法解决,因此我决定更改为.resw资源。当然,这解决了我的问题,但我必须复制资源,这正是我试图避免的。

+0

但这是不可能的!如何在另一个PCL库中使用它?我很伤心 – 2015-06-18 12:24:14

+0

这个信息是不准确的,你可以建立和部署应用程序,请取消你的答案作为正确的。 – DVD 2015-08-06 17:45:39

+1

@DVD当然可以:)现在有一些解决方法可以帮助那些需要它的人,而且不能只是切换到.resw文件。 – yasen 2015-08-06 18:07:58

1
+0

不幸的是,它在上述问题中被标记为“固定”,没有任何进一步的解释,而不适用于VS 2013更新4 - 我们希望它在即将到来的Visual Studio版本中得到修复... – TheEye 2015-04-23 14:12:13

0

有同样的问题。我尝试通过Windows Phone部署工具进行部署,它工作。 因此,而不是使用Visual Studio部署:创建包并将它们放在手机上,它的工作原理!

+0

您是否在版本中构建?另外,您是否尝试过为商店构建一个包并进行部署?我在调试和其他一些场景中没有问题,但是无法为商店构建工作发布版本(如果我没有记错的话......那是前一段时间。)(我要求让我们知道它是否真的是固定的,并不是我特别需要它:) :) – yasen 2015-06-03 10:18:44

+0

是的,在Release中有效。 – Jmie 2015-06-26 10:18:50

3

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

所以我正在做的是从PCL复制和转换资源,并将其作为原生的.resw资源放置在Windows Phone项目的每一个版本中,使用我自己制作的工具 - ResxHell。只需按照库中的说明,然后就可以达到资源这样

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");

+0

你应该让这个工具生成一个cs文件,就像resx资源一样。 :P通过字符串做任何事情都不冷酷。 – yasen 2015-10-26 09:45:24

+0

@Yasen是的,我也想过,但这种方法可能会更困难一点,我没有足够的时间去做这件事:P。我现在正在弄清楚如何以更优雅的方式访问字符串资源。一旦我发现我会让你知道:-) – 2015-10-26 10:28:52

相关问题