6

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

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

        XslCompiledTransform myXslTransform = new XslCompiledTransform();

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

... 其中 [projectName] 是项目的名称。但是,这似乎不起作用。我玩过不同的路径,但不知何故,我似乎没有做对。我确信这只是一件小事,但我在互联网(或这里)上找到的所有文章都没有帮助我。

任何人都可以帮忙吗?

4

2 回答 2

5

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

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

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

于 2013-04-09T08:01:39.810 回答
4

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

于 2013-04-08T16:24:32.300 回答