M.S*_*amm 3 c# deployment msbuild embedded-resource
在 C# 项目中,默认情况下生成的资源名称Embedded Resource会经过一些修改,以使结果名称成为命名空间的有效语言标识符。
例如Foo/Bar/123.txt变成{Default Namespace}.Foo.Bar._123.txt,我必须用 加载它asm.GetManifestResourceStream("Yuck.Foo.Bar._123.txt")。
我更愿意让我的资源保留它们的相对路径,以便Foo/Bar/123.txt更好地模拟虚拟文件系统,这样我就可以加载它们,例如asm.GetManifestResourceStream("Foo/Bar/123.txt").
现在我知道.Net对资源名称没有限制,所以看起来可行。
但是如何让构建引擎为我生成合理的路径名呢?
在.csproj文件中,它们Embedded Resources被定义为<EmbeddedResource>项目。
它们具有命名的元数据<LogicalName>,允许覆盖原本生成的资源名称。
例如:
<ItemGroup>
<EmbeddedResource Include="Foo\Bar\123.txt">
<LogicalName>Foo\Bar\123.txt</LogicalName>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
将生成一个可以使用加载的资源asm.GetManifestResourceStream("Foo\Bar\123.txt")
要对所有嵌入式资源执行此操作,我们可以向 .csproj 文件添加一个重命名任务,该任务在生成默认名称之前运行并显式分配我们选择的名称:
<Target Name="ModifyEmbeddedResourceNames" BeforeTargets="CreateManifestResourceNames">
<ItemGroup>
<EmbeddedResource>
<LogicalName>%(EmbeddedResource.Identity)</LogicalName>
</EmbeddedResource>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
这样我们就可以获得以它们命名的资源Identity。
| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |