嵌套文件时嵌入的资源名称丢失扩展名
Embedded Resource Name Loses Extension When File is Nested
我将一些脚本存储在标记为嵌入式资源的文件中。我将这些文件中的每一个都嵌套在它们关联的 .cs
文件下。不幸的是,出于某种原因,当您以这种方式嵌套文件时,嵌入的资源名称会丢失文件扩展名。这意味着在运行时我无法识别哪些嵌入式资源是或不是脚本。我该怎么办?
我试过的一件事没有用:获取 ManifestResourceInfo
对象,它有一个 FileName
属性。不幸的是,这个 属性 是 null
。
我尝试的另一件事是将扩展名加倍。 (例如:filename.ext.ext
)。这没有用,第一个 .
之后的所有内容仍然丢失。
我尝试用非常不同的方式命名资源,发现资源名称甚至没有改变。 它似乎正在为基于 "dependent upon" 文件 的嵌套嵌入式资源文件生成资源名称,在本例中它只是一个常规 .cs
文件.我尝试将 .cs
文件的扩展名加倍为 filename.extrastuff.cs
,但资源名称仍然没有改变。它坚持在第一个 .
.
之后剪掉所有内容
不,好的,我现在看到它实际上是在 .cs
文件中定义的 type 之后命名资源,而不是任何一个文件的文件名。这就是扩展名没有区别的原因。这意味着我无法对任何一个文件名做任何事情来帮助找到资源。
我发现文件丢失扩展名的原因是由于某些原因,当文件嵌套时,VS 在 type 之后命名资源,而不是在 文件.
我发现唯一允许我在嵌套时仍然有扩展名的方法是手动编辑 .csproj
文件并添加一个 LogicalName
标签,它允许您覆盖资源名字.
<EmbeddedResource Include="Path\To\NestedFile.ext">
<LogicalName>NestedFile.ext</LogicalName>
<DependentUpon>ParentFile.cs</DependentUpon>
</EmbeddedResource>
遗憾的是,没有 IDE 对此的支持,而且我使用的 FileNesting 扩展也不支持写入此标记。
必须为每个文件都这样做太麻烦了,所以我不必依赖文件扩展名,而是必须做一些事情,比如在我的脚本文件中添加一个标识符,将它们标识为脚本。
最终我意识到,因为在我的例子中我正在验证来自单元测试的脚本文件,所以我可以简单地扫描文件系统而不是资源清单并完全避免这个问题。
我将一些脚本存储在标记为嵌入式资源的文件中。我将这些文件中的每一个都嵌套在它们关联的 .cs
文件下。不幸的是,出于某种原因,当您以这种方式嵌套文件时,嵌入的资源名称会丢失文件扩展名。这意味着在运行时我无法识别哪些嵌入式资源是或不是脚本。我该怎么办?
我试过的一件事没有用:获取 ManifestResourceInfo
对象,它有一个 FileName
属性。不幸的是,这个 属性 是 null
。
我尝试的另一件事是将扩展名加倍。 (例如:filename.ext.ext
)。这没有用,第一个 .
之后的所有内容仍然丢失。
我尝试用非常不同的方式命名资源,发现资源名称甚至没有改变。 它似乎正在为基于 "dependent upon" 文件 的嵌套嵌入式资源文件生成资源名称,在本例中它只是一个常规 .cs
文件.我尝试将 .cs
文件的扩展名加倍为 filename.extrastuff.cs
,但资源名称仍然没有改变。它坚持在第一个 .
.
不,好的,我现在看到它实际上是在 .cs
文件中定义的 type 之后命名资源,而不是任何一个文件的文件名。这就是扩展名没有区别的原因。这意味着我无法对任何一个文件名做任何事情来帮助找到资源。
我发现文件丢失扩展名的原因是由于某些原因,当文件嵌套时,VS 在 type 之后命名资源,而不是在 文件.
我发现唯一允许我在嵌套时仍然有扩展名的方法是手动编辑 .csproj
文件并添加一个 LogicalName
标签,它允许您覆盖资源名字.
<EmbeddedResource Include="Path\To\NestedFile.ext">
<LogicalName>NestedFile.ext</LogicalName>
<DependentUpon>ParentFile.cs</DependentUpon>
</EmbeddedResource>
遗憾的是,没有 IDE 对此的支持,而且我使用的 FileNesting 扩展也不支持写入此标记。
必须为每个文件都这样做太麻烦了,所以我不必依赖文件扩展名,而是必须做一些事情,比如在我的脚本文件中添加一个标识符,将它们标识为脚本。
最终我意识到,因为在我的例子中我正在验证来自单元测试的脚本文件,所以我可以简单地扫描文件系统而不是资源清单并完全避免这个问题。