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

6
我有一个XSLT文件,我想加载并用它来转换XML文件。我已经将该文件添加到与使用它的代码相同的项目中,并将其放在“资源”文件夹中,并将构建操作设置为“资源”。
这是试图访问文件的代码:
        XslCompiledTransform myXslTransform = new XslCompiledTransform();

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

“...其中 [projectName] 是项目的名称。然而,这似乎不起作用。我已经尝试了不同的路径,但是我总觉得我做错了什么。我相信这只是一个小问题,但我在互联网上(或这里)找到的所有文章都没有帮助到我。

有谁可以帮忙吗?

2个回答

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


到目前为止,我已经尝试过这个,但是明天会看看能否让它工作。 - Anne Schuessler
好的,如果你遇到了问题,请告诉我。我是凭记忆写的,所以这段代码可能存在漏洞。 - outcoldman

5

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

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

这与outcoldman提出的建议非常相似,只是访问资源的方式有微小的差别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接