2014-10-07 39 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

相關問題