嵌套文件时嵌入式资源名称丢失扩展名
作者:互联网
我有一些脚本存储在标记为“嵌入式资源”的文件中.我将每个这些文件嵌套在它们相关的.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