将XSLT文件作为来自同一项目的资源访问

本文关键字:项目 资源 访问 文件 XSLT | 更新日期: 2023-09-27 18:07:59

我有一个XSLT文件,我想加载它并使用它来转换XML文件。我已经将文件添加到与使用它的代码相同的项目中,并将其放在"资源"文件夹中,并将构建操作设置为"资源"。

这是试图访问文件的代码:

        XslCompiledTransform myXslTransform = new XslCompiledTransform();
        myXslTransform.Load(@"[projectName];component/Resources/OrderManagement/OrderOverview.xslt");

…其中[projectName]为项目名称。然而,这似乎不起作用。我尝试过不同的路径,但不知怎的,我似乎没有找到正确的方法。我相信这只是一件小事,但是我在网上(或这里)找到的文章都没有帮助我。

有人能帮忙吗?

将XSLT文件作为来自同一项目的资源访问

一位同事帮我找到了一个解决方案。我们通过项目的属性添加资源,以便我可以轻松访问其内容,并使用以下代码。

using (var reader = new StringReader(Resources.OrderOverview)) {
  using (XmlReader xmlReader = XmlReader.Create(reader)) {
    myXslTransform.Load(xmlReader);
    myXslTransform.Transform(fileName, arguments, xmlTextWriter);
  }
}

这与outcoldman的建议非常相似,只是访问资源的方式不同。

将构建操作从"资源"更改为"嵌入式资源",之后您可以执行如下操作

XslCompiledTransform myXslTransform = new XslCompiledTransform();
var assembly = typeof(SomeTypeFromAssemblyWithResource).Assembly;
using (var stream = assembly.GetManifestResourceStream("Resources.OrderManagement.OrderOverview.xslt"))
{
    using (var xmlReader = XmlReader.Create(stream))
    {
        myXslTransform.Load(xmlReader );
    }
}

dll中的资源名可能很棘手,所以也许你想首先知道Assembly.GetManifestResourceNames的资源名。编译器根据文件夹和程序集生成名称