我创建了一个新的VS解决方案,该解决方案需要包含来自其他解决方案的已修改文件子集。两种解决方案都具有默认名称空间“Microsoft.Windows.Controls”。旧解决方案中的程序集名为“WPFToolkit”,新程序集名称为“DatePicker”。我复制到新解决方案的一个文件是名为“ExceptionStringTable.txt”的嵌入式资源。内容如下所示,虽然我不确定它是什么格式:
; DataGrid Selection Commands DataGrid_SelectAllCommandText=Select All DataGrid_SelectAllKey=Ctrl+A DataGrid_SelectAllKeyDisplayString=Ctrl+A
我将文件的“Build Action”设置为“Embedded Resource”,就像在原始解决方案中一样。在运行时,它像这样加载:
private static ResourceManager _resourceManager = new ResourceManager("ExceptionStringTable", typeof(SR).Assembly);
执行代码时
_resourceManager.GetString(id.String)我收到了这个运行时异常:
发生了System.Resources.MissingManifestResourceException Message =“找不到适合指定文化或中性文化的任何资源。确保在编译时将ExceptionStringTable.resources \”正确嵌入或链接到assembly \“DatePicker \”,或者所有附属程序集都需要可加载并完全签名。“
以编程方式列出程序集的资源名称,我得到了这个:
DatePicker.g.resources Microsoft.Windows.Controls.Resources.ExceptionStringTable.txt Microsoft.Windows.Controls.Properties.Resources.resources
我必须做什么才能将ExceptionStringTable.txt转换为等效的.resources然后嵌入到我的程序集中,以便uri“ExceptionStringTable”找到它?
答案 0 :(得分:1)
您需要将txt文件转换为.resource文件:
resgen.exe ExceptionStringTable.txt
这将输出ExceptionStringTable.resources文件。然后需要将此文件添加为嵌入式资源
你可能想检查旧的项目文件,看是否有一个postbuild任务或者是自动执行此任务的。
<强>更新强>
最简单的方法是将.txt文件转换为.resx文件:
resgen.exe ExceptionStringTable.txt ExceptionStringTable.resx
然后将此文件添加为嵌入式资源。之后,您可以删除旧的.txt文件。