将XSLT文件作为来自同一项目的资源访问
本文关键字:项目 资源 访问 文件 XSLT | 更新日期: 2023-09-27 18:07:59
我有一个XSLT文件,我想加载它并使用它来转换XML文件。我已经将文件添加到与使用它的代码相同的项目中,并将其放在"资源"文件夹中,并将构建操作设置为"资源"。
这是试图访问文件的代码:
XslCompiledTransform myXslTransform = new XslCompiledTransform();
myXslTransform.Load(@"[projectName];component/Resources/OrderManagement/OrderOverview.xslt");
…其中[projectName]为项目名称。然而,这似乎不起作用。我尝试过不同的路径,但不知怎的,我似乎没有找到正确的方法。我相信这只是一件小事,但是我在网上(或这里)找到的文章都没有帮助我。
有人能帮忙吗?
一位同事帮我找到了一个解决方案。我们通过项目的属性添加资源,以便我可以轻松访问其内容,并使用以下代码。
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的资源名。编译器根据文件夹和程序集生成名称