You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#程序集中嵌入XSLT文件并获取对应路径

核心结论

嵌入程序集的资源没有独立的磁盘文件路径。这类资源是作为二进制数据段直接打包在exe/dll的程序集内部,不属于文件系统上的独立文件,不存在直接获取其原生文件路径的方法。

思路误区说明

你不想使用流读取的想法,本质是混淆了两类文件的生成配置差异:

  • 若将Xslt文件生成操作设置为内容并配置复制到输出目录,文件会作为独立项和exe存放在同一目录,可直接获取绝对/相对路径
  • 若设置为嵌入资源,文件已经被编译进程序集二进制,不是磁盘上的单独文件,自然不存在独立路径

推荐实现方案(完全符合单exe打包需求)

XSLT加载本身不需要物理文件路径,XslCompiledTransform等原生XSLT处理类原生支持从流、XmlReader直接加载,全程不需要磁盘IO,不需要落地文件,代码示例:

using System.Reflection;
using System.Xml;
using System.Xml.Xsl;

// 直接从嵌入资源流加载XSLT,无磁盘读写
var assembly = Assembly.GetExecutingAssembly();
using var xsltStream = assembly.GetManifestResourceStream("TimeSoft.Entities.Properties.Resources.general.Xslt");
using var xmlReader = XmlReader.Create(xsltStream);
var xslt = new XslCompiledTransform();
xslt.Load(xmlReader);

如果你是通过Resources.resx管理嵌入资源,可以直接用强类型资源类访问,不需要手动拼写资源名:

using System.IO;
using System.Xml;
using System.Xml.Xsl;

// 直接读取强类型资源内容
var xsltText = Properties.Resources.general;
using var strReader = new StringReader(xsltText);
using var xmlReader = XmlReader.Create(strReader);
var xslt = new XslCompiledTransform();
xslt.Load(xmlReader);

折中方案(仅适配强制要求传文件路径的场景)

如果你调用的第三方组件仅支持传入文件路径、不支持流/文本入参,只能临时将嵌入资源写入磁盘临时目录获取路径,用完后删除临时文件,示例代码:

using System.Reflection;
using System.IO;

var assembly = Assembly.GetExecutingAssembly();
// 生成唯一临时文件路径
var tempXsltPath = Path.Combine(Path.GetTempPath(), $"general_{Guid.NewGuid():N}.xslt");
// 将嵌入资源写入临时文件
using (var resStream = assembly.GetManifestResourceStream("TimeSoft.Entities.Properties.Resources.general.Xslt"))
using (var fs = File.Create(tempXsltPath))
{
    resStream.CopyTo(fs);
}

try
{
    // 此处tempXsltPath即可作为文件路径传入需要的方法
    CallMethodNeedXsltPath(tempXsltPath);
}
finally
{
    // 用完清理临时文件
    if (File.Exists(tempXsltPath)) File.Delete(tempXsltPath);
}

注意:该方案会在磁盘生成临时文件,不符合你「所有依赖打包在exe内、无需读取磁盘文件」的初始需求,仅作为兼容特殊场景的备选。

内容的提问来源于stack exchange,提问作者Kübra Nur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:03:36