从同一项目访问XSLT文件作为资源?

时间:2013-04-08 15:51:09

标签: c# .net xml visual-studio xslt

我有一个XSLT文件,我想加载并用于转换XML文件。我已将该文件添加到与使用它的代码相同的项目中,并将其放在“Resources”文件夹中,并将Build Action设置为“Resource”。

这是尝试访问该文件的代码:

        XslCompiledTransform myXslTransform = new XslCompiledTransform();

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

...其中[projectName]是项目的名称。然而,这似乎不起作用。我玩过不同的路径,但不知怎的,我似乎没有把它弄好。我确定这只是一件小事,但我在互联网(或这里)找到的文章都没有帮助过我。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

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

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

这与outcoldman所建议的非常类似,因为资源的访问方式不同。

答案 1 :(得分:3)

将构建操作从Resource更改为Embedded Resource,之后您可以执行类似

的操作
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知道资源名称。编译器根据文件夹和程序集生成名称。