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

我有一个XSLT文件,我想加载并用于转换XML文件。 我已将文件添加到与使用它的代码相同的项目中,并将其放在“Resources”文件夹中,并将Build Action设置为“Resource”。

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

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所建议的非常相似,即微妙地区别对资源的访问方式不同。

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