Ann*_*ler 6 .net c# xml xslt visual-studio
我有一个XSLT文件,我想加载并用于转换XML文件.我已将该文件添加到与使用它的代码相同的项目中,并将其放在"Resources"文件夹中,并将Build Action设置为"Resource".
这是尝试访问该文件的代码:
XslCompiledTransform myXslTransform = new XslCompiledTransform();
myXslTransform.Load(@"[projectName];component/Resources/OrderManagement/OrderOverview.xslt");
Run Code Online (Sandbox Code Playgroud)
...其中[projectName]是项目的名称.然而,这似乎不起作用.我玩过不同的路径,但不知怎的,我似乎没有把它弄好.我确定这只是一件小事,但我在互联网(或这里)找到的文章都没有帮助过我.
有人可以帮忙吗?
将构建操作从资源更改为嵌入式资源,之后您可以执行类似的操作
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
dll 中的资源名称可能很棘手,因此您可能想首先使用Assembly.GetManifestResourceNames了解资源名称。编译器根据文件夹和程序集生成名称。
一位同事帮助我找到了解决方案.我们通过项目的属性添加了资源,以便我可以轻松访问其内容并使用以下代码.
using (var reader = new StringReader(Resources.OrderOverview)) {
using (XmlReader xmlReader = XmlReader.Create(reader)) {
myXslTransform.Load(xmlReader);
myXslTransform.Transform(fileName, arguments, xmlTextWriter);
}
}
Run Code Online (Sandbox Code Playgroud)
这与outcoldman所建议的非常类似,因为资源的访问方式不同.