我有一个XSLT文件,我想加载并用于转换XML文件。我已将该文件添加到与使用它的代码相同的项目中,并将其放在“Resources”文件夹中,并将Build Action设置为“Resource”。
这是尝试访问该文件的代码:
XslCompiledTransform myXslTransform = new XslCompiledTransform();
myXslTransform.Load(@"[projectName];component/Resources/OrderManagement/OrderOverview.xslt");
...其中[projectName]是项目的名称。然而,这似乎不起作用。我玩过不同的路径,但不知怎的,我似乎没有把它弄好。我确定这只是一件小事,但我在互联网(或这里)找到的文章都没有帮助过我。
有人可以帮忙吗?
答案 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知道资源名称。编译器根据文件夹和程序集生成名称。