问题 如何在类库项目中引用xml文件


我有一个类库项目。在其中一个类中,我需要访问XML文件。如何在类中引用此文件的路径?该文件位于同一项目的其中一个文件夹中。


12644
2018-05-20 22:43


起源

请指定您正在使用的IDE,以及您正在尝试做的事情。 - axel_c
我正在使用Visual Studio 2010(C#)。我有一个类库项目,并在该项目的类中从XML文件中读取。我在同一项目的一个文件夹中有该XML文件。如何在其中一个类中访问此XML文件(位置)以从该文件中读取。我知道如何从xml读取,但我坚持指定XML文件的位置。 - user228777


答案:


如果你 指定要编译到程序集中的Xml文件 您可以使用反射在运行时读取它。

Assembly asm = Assembly.GetExecutingAssembly();
XmlDocument doc = new XmlDocument();
XmlTextReader reader = new XmlTextReader(asm.GetManifestResourceStream("MyNamespace.MyXmlFile.xml"));
doc.Load(reader);

更新

由于X509Certificate2构造函数只接受证书文件或字节数组的文件路径,因此您可能希望使用证书文件的可配置路径,而不是将其嵌入到程序集中。


9
2018-05-20 22:52



是的我计划将XML放在同一个类库的一个目录中,以便与项目一起编译。你可以解释一下如何用Reflection做这个吗?谢谢! - user228777
@ user228777我添加了一个代码示例的链接。 - Filburt
感谢您的信息 - 我如何使用它来读取类库中的Cetificate文件(.pfx)? - user228777
string sFile = HttpContext.Current.Server.MapPath(“〜/ certificate.pfx”); X509Certificate2 cert1 = new X509Certificate2(sFile,“password”,X509KeyStorageFlags.MachineKeySet);这就是我将在类库中尝试做的事情。 .pfx文件将驻留在类库的一个文件夹中。 - user228777


使用@Filburt提供的链接:

首先将XML文件的BuildAction更改为Embedded资源。它将使用程序集的根命名空间和文件名添加到程序集中: 例如,如果项目的根命名空间是MyNamespace,则资源可能名为MyNamespace.MyXmlFile.xml

   Assembly _assembly;
   StreamReader _textStreamReader;
   _assembly = Assembly.GetExecutingAssembly();
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyXmlFile.xml"));

您可以使用任意数量的类将流作为构造函数参数。


2
2018-05-20 23:10



如何使用它来读取类库中的Cetificate文件(.pfx)? - user228777
string sFile = HttpContext.Current.Server.MapPath(“〜/ certificate.pfx”); X509Certificate2 cert1 = new X509Certificate2(sFile,“password”,X509KeyStorageFlags.MachineKeySet);这就是我将在类库中尝试做的事情。 .pfx文件将驻留在类库的一个文件夹中。 - user228777
我错过了这个动作,它让我完全难过 - 谢谢! - John N
很乐意提供帮助! - Jeff Martin