Как ссылаться на XML-файл в проекте библиотеки классов

#c# #.net #visual-studio

#c# #.net #visual-studio

Вопрос:

У меня есть проект библиотеки классов. В одном из классов мне нужно получить доступ к XML-файлу. Как мне указать путь к этому файлу в классе? Файл находится в одной из папок того же проекта.

Комментарии:

1. Пожалуйста, укажите IDE, которую вы используете, и что именно вы пытаетесь сделать.

2. Я использую Visual Studio 2010 (C #). У меня есть проект библиотеки классов и один из классов этого проекта для чтения из XML-файла. У меня есть этот XML-файл в одной из папок того же проекта. Как мне получить доступ к этому XML-файлу (местоположению) в одном из классов для чтения из этого файла. Я знаю, как читать из xml, но я застрял на указании местоположения в XML-файле.

Ответ №1:

Если вы укажете Xml-файл, который будет скомпилирован в вашу сборку, вы сможете прочитать его во время выполнения с помощью отражения.

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

Обновить

Поскольку конструктор X509Certificate2 будет принимать только путь к вашему файлу сертификата или массив байтов, вы можете захотеть использовать настраиваемый путь к вашему файлу сертификата вместо встраивания его в вашу сборку.

Комментарии:

1. Да, я планирую поместить XML в один из каталогов той же библиотеки классов для компиляции с проектом. Не могли бы вы, пожалуйста, немного подробнее объяснить, как использовать отражение для этого? Спасибо!

2. Спасибо за информацию — Как мне использовать same для чтения файлов Cetificate (.pfx) в библиотеках классов?

3. string sFile = HttpContext.Current. Сервер. MapPath(«~/certificate.pfx»); X509Certificate2 cert1 = новый X509Certificate2(sFile, «пароль», X509KeyStorageFlags. MachineKeySet); Это то, что я буду пытаться сделать в библиотеке классов. файл .pfx будет находиться в одной из папок библиотеки классов.

Ответ №2:

Используя ссылку, предоставленную @Filburt:

Сначала измените BuildAction вашего XML-файла на Embedded resource. Он будет добавлен в вашу сборку с корневым пространством имен вашей сборки и именем файла: например, если корневым пространством имен вашего проекта является MyNamespace, ресурс может называться MyNamespace.MyXmlFile.xml

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

Вы могли бы использовать любое количество классов, которые принимают поток в качестве параметра конструктора.

Комментарии:

1. Как мне использовать same для чтения файлов Cetificate (.pfx) в библиотеках классов?

2. string sFile = HttpContext.Current. Сервер. MapPath(«~/certificate.pfx»); X509Certificate2 cert1 = новый X509Certificate2(sFile, «пароль», X509KeyStorageFlags. MachineKeySet); Это то, что я буду пытаться сделать в библиотеке классов. файл .pfx будет находиться в одной из папок библиотеки классов.

3. Я пропустил это действие, и оно поставило меня в полное замешательство — спасибо!