我在App_GlobalResources.resx文件中保留了几个文本.
文本必须是多行的,我需要让它们包含换行符.但是,当我读取内容时,所有换行都消失了(\r\n打印出来,而不是作为CRLF 10 13控制字符).
我知道\r\n当我阅读内容时,我可以通过重新替换(或其他任何事情)回到CRLF来解决这个问题,但我想知道为什么这些明显以文本为目标的resx文件会忽略控制字符 - 而且CRLF很重要 - 如果有人知道是否有设置或某些东西可以让它自然地工作.
Visual Studio已经开始表现出一种相当恼人的怪癖.当我编辑资源文件(使用设计器视图或直接编辑XML)时,它会创建一个重复的资源Designer.cs文件,导致项目无法构建.
示例:假设我的资源文件名为ProjectSQL.resx.如果在Solution Explorer中展开ProjectSQL.resx,它将显示ProjectSQL.Designer.cs.当我对ProjectSQL.resx中定义的其中一个查询进行编辑时,它保存得很好,但创建了另一个名为ProjectSQL1.Designer.cs的文件.
在该示例中,现在有两个具有相同类名的类文件,导致构建失败.
以前有人有这个问题吗?你怎么修好它的?我已经尝试关闭解决方案并重新打开,以及重新启动Visual Studio.对于那些感兴趣的人,在Windows 7旗舰版上使用VS 2010 Premium.
我试图将文本输出到Java中的资源文件,如下所示:
File file = new File(MLM.class.getClassLoader().getResource("mazes.txt").toString());
BufferedWriter out = new BufferedWriter(new FileWriter(file));
..
Run Code Online (Sandbox Code Playgroud)
但是因为没有创建资源文件,我得到一个空指针异常.如果不存在此错误,如何先创建空白资源文件?
我正在用C#构建一个ASP.NET MVC 4网站.我正在资源文件(.resx)中本地化我的所有静态字符串.我使用Visual Studio界面来创建和填充资源文件.在我index.cshtml看来,我尝试使用资源文件中的一个字符串,如下所示:
@using Namespace.To.RESX.File
...
<h1>@EN_US.GLOBAL_NAME</h1>
<h2>“@EN_US.GLOBAL_SLOGAN”</h2>
...
Run Code Online (Sandbox Code Playgroud)
我可以编译应用程序,但是当我加载页面时出现运行时错误,说:
Compiler Error Message: CS0122: 'Namespace.To.RESX.File.EN_US' is inaccessible due to its protection level
Run Code Online (Sandbox Code Playgroud)
查看resx设计器文件,我可以看到该类及其所有成员都标记为internal.我完全理解C#访问控制修饰符的作用,它们是如何工作的等等......但我不明白为什么Visual Studio会限制对这样的资源成员的访问.
为什么Visual Studio会这样做?是否有(简单)方法来更改这些访问控制修饰符,或者我是否完全忽略了资源文件的要点?
资源文件似乎非常适合标签和消息的本地化,但它们是否完美?
例如:
我在导入资源文件时遇到问题.我正在使用pyqt4和猴子工作室,我正在尝试导入一个png图像.当我运行程序时,我得到一个导入错误,如
ImportError:没有名为icon_rc的模块
我知道我必须使用pyrcc4编译它但我不明白如何做这个可以任何人帮助请.有一个答案可以完全解释如何编译资源文件以便我可以导入它,这将非常有帮助.
理论上,使用cmake使用资源文件构建Win32应用程序非常容易.在add_executable命令中,资源文件可以像C或C++源文件一样容易地列出.但是,使用MinGW工具构建时存在一个已知错误.
我找到了一个解决方法,即在CMakeFiles.txt中包含以下内容......
if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
ENABLE_LANGUAGE(RC)
SET(CMAKE_RC_COMPILE_OBJECT
"<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif(MINGW)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用.似乎发生的是windres生成一个不理解的<whatever>.rc.res文件ld.
在我的搜索中,我强烈怀疑Win32支持被视为非常低的优先级,尤其是在Visual Studio之外.这是可以理解的,因为Win32显然不像以前那么重要.当然,Visual Studio Express Editions可以免费轻松获得.
即便如此,如果我可以将MinGW GCC用于我仍在使用的一些旧版Win32应用程序,对我来说会很方便.如果不出意外,我可以获得GCOV测试覆盖率统计数据.
显然,如果所有其他方法都失败了,我总是可以使用自定义构建命令处理资源文件.一个问题是我不熟悉windres或ld,或者MinGW是如何处理Win32资源文件的.另一个是,如果有人已经拥有了一个他们想与我分享的优质轮子,我真的不想重新发明轮子.
基本上就是这样 - 我如何使用cmake支持使用资源文件构建Win32应用程序,并使用MinGW(但不破坏对Visual Studio的支持)?
想象一下,你正在开发一个由数百个程序集组成的.Net 4.0项目,每个程序集都有自己的资源文件(.resx)用于本地化.通过使用ResXFileCodeGenerator(创建"ResourceFile.Designer.cs"文件)自动生成的类,从C#访问本地化字符串:string test = ResourceFile.TestString;
每个程序集都有特定于它的本地化字符串,但是有些字符串对所有程序集都是通用的.您告诉自己,在"父"资源文件中使用这些"公共字符串"会很好,如果资源键在"本地"资源文件中不可用,代码将在该文件中回退.然后你说"嘿!继承可以在这里工作." 事实上,在自动生成的设计器文件中执行类似的操作确实有效:
internal class ResourceFile : ParentResourceFile
也就是说,仍然可以使用ResourceFile未定义但定义的字符串.ParentResourceFileResourceFile.StringInParentFile
但是设计器文件标题中的某些内容会让您感到麻烦:" 对此文件的更改可能会导致错误的行为,如果重新生成代码,则会丢失. "另外,您知道在自动生成的设计器文件中播放是不受欢迎的.所以你来到这里,你问:
你说"谢谢你".
目前,我这样做:
Names -> "name1|name2|name3"
Resource.Names.Split('|');
Run Code Online (Sandbox Code Playgroud)
是否可以在资源文件中将这些名称定义为数组,这样我就不必每次都通过拆分来解析?
或许像下面这样的东西?
Names[] -> "name1"
Names[] -> "name2"
Names[] -> "name3"
Resource.Names; // is of type string[]
Run Code Online (Sandbox Code Playgroud)
还有其他更好的方法吗?
resource-files ×10
resx ×5
c# ×4
asp.net ×2
.net ×1
asp.net-mvc ×1
cmake ×1
file ×1
inheritance ×1
java ×1
line-breaks ×1
localization ×1
mingw ×1
newline ×1
pyqt ×1
pyqt4 ×1
python ×1
resources ×1
winapi ×1