我在获取嵌入式资源流时遇到问题。大多数在线示例显示的路径可以通过将路径的斜杠更改为源的点来直接转换(MyFolder/MyFile.ext 变为 MyNamespace.MyFolder.MyFile.ext)。但是,当文件夹名称中有一个点并且使用特殊字符时,手动获取资源名称将不起作用。我试图找到一个可以将路径转换为资源名称的函数,因为 Visual Studio 在编译时会重命名它们..
这些名称来自解决方案......
- 内容/jQuery.UI-1.8.2/jQuery.UI.css
- Scripts/jQuery-1.5.2/jQuery.js
- Scripts/jQuery.jPlayer-2.0.0/jQuery.jPlayer.js
- 脚本/jQuery.UI-1.8.2/jQuery.UI.js
...在资源中改成了这些名字...
- Content.jQuery.UI_1._8._2.jQuery.UI.css
- Scripts.jQuery_1._5._2.jQuery.js
- Scripts.jQuery.jPlayer_2._0._0.jQuery.jPlayer.js
- Scripts.jQuery.UI_1._8._12.jQuery.UI.js
斜杠被翻译成点。但是,当在文件夹名称中使用点时,第一个点显然被认为是扩展名,其余点将更改为带有下划线前缀。但是,此逻辑不适用于 jQuery.js 文件,可能是因为“扩展名”是一个数字?这是一个能够翻译我目前遇到的问题的函数,但在 jQuery.js 路径上不起作用。
protected String _GetResourceName( String[] zSegments )
{
String zResource = String.Empty;
for ( int i = 0; i < zSegments.Length; i++ )
{
if ( i != ( zSegments.Length - 1 ))
{
int iPos = zSegments[i].IndexOf( '.' );
if ( iPos != -1 )
{
zSegments[i] = zSegments[i].Substring( 0, iPos + 1 )
+ zSegments[i].Substring( iPos + 1 ).Replace( ".", "._" );
}
}
zResource += zSegments[i].Replace( '/', '.' ).Replace( '-', '_' );
}
return String.Concat( _zAssemblyName, zResource );
}
有没有可以帮我改名字的功能?它是什么?或者我在哪里可以找到所有规则以便我可以编写自己的函数?感谢您提供的任何帮助。
最佳答案
这是一个很晚的答案......但由于这是谷歌上的第一次点击,我会发布我发现的内容!
您可以简单地强制编译器根据需要命名嵌入资源;这会从一开始就解决这个问题......你只需要编辑你的 csproj 文件,如果你想要通配符,你通常会这样做!这是我所做的:
<EmbeddedResource Include="$(SolutionDir)\somefolder\**">
<Link>somefolder\%(RecursiveDir)%(Filename)%(Extension)</Link>
<LogicalName>somefolder:\%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
</EmbeddedResource>
在这种情况下,我告诉 Visual Studio,我希望将“某个文件夹”中的所有文件作为嵌入式资源导入。我还希望它们显示在 VS 解决方案资源管理器中的“某个文件夹”下(这是链接标记)。最后,在编译它们时,我希望它们的命名与它们在我的磁盘上的名称和地址完全相同,只有“somefolder:\”前缀。最后一部分是变魔术。
关于c# - 检索具有特殊字符的嵌入资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5769705/