#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. Я пропустил это действие, и оно поставило меня в полное замешательство — спасибо!