我正在构建一个Windows Phone 8.1应用程序。对于其视图中使用的本地化资源,它使用“新”.resw
文件。
由于多种原因,我在可移植类库中构建了应用程序的视图模型。这些视图模型还使用了一些可本地化的文本,我将这些文本放在同一项目中的.resx
文件中。最初,一切似乎都运作良好。
今天,我注意到我无法在发布模式下将我的应用程序部署到物理设备,并且我已确定resx文件以某种方式导致此问题。我尝试部署时,Visual Studio给出了这个错误:
DEP6810:MdilXapCompile.exe失败,错误代码为1004.请参阅日志文件 'C:\ MySolution \ MyPCLProject \ OBJ \发布\ MDIL \ MDILXapCompileLog.txt' 了解更多详情。
在日志文件中:
错误:编译过滤器参数指定不存在的文件: C:\ MySolution \ MyPCLProject \ OBJ \发布\ MSIL \ EN \ MyPCLProject.resources.dll 参数无效
Microsoft(R)MDIL XAP编译器 - 版本4.0.0.0版权所有(c) 微软公司。保留所有权利。
用法:MDILXAPCompile / In:/ Out: / Config:[/ CompileFilter:;] [/ Timeout:] [/ Log:] [/ AppX]
有什么用?
这对我来说似乎是一个非常奇怪的限制,但到目前为止,我一直无法确定为什么这个(不幸的是相当重要)的案例失败了。
是否有人知道我是否可以使资源像Debug版本中那样工作?
我创建了一个应该重现错误的blank solution(.zip 41 kB)。应用程序在TextBlock中显示PCL中唯一的资源,以确认资源已嵌入。
答案 0 :(得分:1)
尝试部署物理设备时遇到了类似的问题,无论是设置为Debug还是Release。 其中一个解决方法是遵循Phil Hoff's blog上的说明,但这对我没有用,所以我发明了自己的解决方法。
事实证明,如果这些文件仅包含字符串值,则可以轻松地将.resx文件转换为.resw(本机Windows Phone 8.1资源格式)。 我开发了一个small tool,它从PCL复制.resx并将它们作为.resw文件放在Windows Phone 8.1项目中,每次构建都会自动生成。然后你可以通过以下代码与他们联系:
var resourceLoader = new ResourceLoader();
var localizedText = resourceLoader.GetString("MyCustomReswFile/MyStringId");
另请查看此问题
Unable to access localized resources in .NET 4.5 PCL from Windows Phone 8.1
为了更好的绑定,我最终创建了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 :(得分:0)
在部署到WP81时,它看起来与PCL中的本地化问题有关,但尚未解决。
了解更多:
Is it possible to use a portable library with localized resources in a Universal app?