.NET如何重命名我的嵌入式资源?

Col*_*nic 12 .net c# visual-studio

当我将文件构建为"嵌入式资源"时,Visual Studio会根据其在项目中的路径为其在程序集中指定名称.例如.我的文件cases/2013.1/colours.xml被赋予一个资源名称,其中包含零星的下划线cases._2013._1.colours.xml.

我的问题是 - 这个名字是如何确定的?规则是否记录在案?Visual Studio使用的方法在哪里?

编辑:我问,因为我正在处理大量这些事情,能够从文件路径中推断出资源名称会很有帮助.

Han*_*ant 16

如MSDN Library文章所述,Resgen.exe使用StronglyTypedResourceBuilder.VerifyResourceName()方法实现的规则.我只是复制MSDN库所说的内容:

如果key参数是空字符串(""),则返回由单个下划线字符(_)组成的字符串.如果key参数不是空字符串,则VerifyResourceName方法会根据provider参数指定的语言将字符串中的每个字符与一组无效标记进行比较.字符串中的任何无效字符都将替换为下划线字符.将用下划线替换的字符如下:

''(空格),U + 00A0(不间断空格),'.' (期间),','(逗号),';' (分号),'|','〜','@','#','%','^','&','*','+',' - ','/','\ ',''','>','?','[',']','(',')','{','}','''(引用),''''(撇号),':'和'!'.

注意
强类型资源不允许使用语言关键字(例如if,for等)作为资源键名称.但是,System.CodeDom设计模式允许通过在关键字前加下划线字符来使用语言关键字.VerifyResourceName方法调用CreateValidIdentifier方法来强制执行此设计.例如,如果使用与语言关键字相同的资源名称(例如for),则名称在生成的强类型资源类中显示为_for.

查看StronglyTypedResourceBuilder类的源代码,文档是准确的.

  • 有趣的是,当我手动调用StronglyTypedResourceBuilder.VerifyResourceName时,我得到的结果与我的程序集中的名称不同.例如,bundle.config变为bundle_config,但程序集中的名称是bundle.config (2认同)
  • @DavidHayes,您必须将算法分别应用于每个标识符组件。在“。”上分割聚合标识符字符串,在每个部分上调用“ VerifyResourceName”,然后将转义的部分与“。”重新连接在一起。 (2认同)