在发布模式

时间:2015-04-22 16:33:15

标签: windows-phone-8.1 portable-class-library

我正在构建一个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和Release版本中编译
  • 在Debug和Release版本中部署到WP模拟器
  • 运行已部署的软件

这对我来说似乎是一个非常奇怪的限制,但到目前为止,我一直无法确定为什么这个(不幸的是相当重要)的案例失败了。

是否有人知道我是否可以使资源像Debug版本中那样工作?

我创建了一个应该重现错误的blank solution(.zip 41 kB)。应用程序在TextBlock中显示PCL中唯一的资源,以确认资源已嵌入。

2 个答案:

答案 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?