其他分享
首页 > 其他分享> > 嵌套文件时嵌入式资源名称丢失扩展名

嵌套文件时嵌入式资源名称丢失扩展名

作者:互联网

我有一些脚本存储在标记为“嵌入式资源”的文件中.我将每个这些文件嵌套在它们相关的.cs文件下.不幸的是,由于某种原因,当您以这种方式嵌套文件时,嵌入式资源名称将失去文件扩展名.这意味着在运行时,我无法确定哪些嵌入式资源是脚本或不是脚本.我该怎么办?

我尝试过的一件事不起作用:获取ManifestResourceInfo对象,该对象具有FileName属性.不幸的是,该属性为null.

我尝试的另一件事是扩展扩展. (例如:filename.ext.ext).这没有用,一切都在第一个之后进行.仍然不见了.

我尝试使用非常不同的名称来命名资源,并注意到资源名称甚至都没有改变.似乎它是根据“依赖”文件生成嵌套的嵌入式资源文件的资源名称的,在这种情况下,“依赖”文件只是一个常规的.cs文件.我尝试将.cs文件的扩展名加倍为filename.extrastuff.cs,但资源名称仍保持不变.它坚持在第一个..之后剪掉所有东西.

不,好的,我现在看到它实际上是在.cs文件中定义的类型之后命名资源,而不是两个文件的文件名.这就是为什么扩展名没有区别的原因.这意味着我无法对两个文件名进行任何操作来帮助查找资源.

解决方法:

我发现文件丢失扩展名的原因是由于某种原因,当文件嵌套时,VS会在类型之后而不是文件后命名资源.

我发现唯一让我在嵌套时仍具有扩展名的事情是手动编辑.csproj文件并添加LogicalName标记,该标记使您可以覆盖资源名称.

<EmbeddedResource Include="Path\To\NestedFile.ext">
  <LogicalName>NestedFile.ext</LogicalName>
  <DependentUpon>ParentFile.cs</DependentUpon>      
</EmbeddedResource>

不幸的是,对此没有IDE支持,并且我正在使用的FileNesting扩展也不支持编写此标记.

不必为每个文件执行此操作太麻烦了,因此我不必依靠文件扩展名,而必须做一些事情,例如在脚本文件中添加一个将其标识为脚本的标识符.

最终,我意识到,由于我要验证单元测试中的脚本文件,因此我可以简单地扫描文件系统而不是资源清单,从而完全避免此问题.

标签:csproj,embedded-resource,c,visual-studio
来源: https://codeday.me/bug/20191026/1939267.html