Не удается найти часть пути к файлу

102
22 апреля 2021, 16:40

Есть проект библиотеки в котором необхдимо хранить XML файл. Структура такова:

 --libray_root
  |Resources
   --codes.xml
  |Logic
   --Iso4217.cs

Файл логики:

public static class Iso4217Codes
    {
        private static List<Currency> Codes { get; set; }
        private const string codesPath = @"..\Resources\codes.xml";
        public static long LoadingSpent { get; }
        static Iso4217Codes()
        {
            var timer = new Stopwatch();
            timer.Start();
            LoadXml();
            timer.Stop();
            LoadingSpent = timer.ElapsedMilliseconds;
        }
        public static void LoadXml()
        {
            var document = XElement.Load(codesPath);
            Codes = (from node in document.Descendants("CcyNtry")
                     select new Currency
                     {
                         Country = node.XPathSelectElement("CtryNm")?.Value,
                         Symbol = node.XPathSelectElement("Ccy")?.Value,
                         Name = node.XPathSelectElement("CcyNm")?.Value,
                         Code = node.XPathSelectElement("CcyNbr")?.Value
                     }).ToList();
        }
        public static string GetSimbolByCode(int code)
        {
            return Codes.FirstOrDefault(x => x.Code == code.ToString())?.Symbol;
        }
        public static string GetCurrencyNameByCode(int code)
        {
            return Codes.FirstOrDefault(x => x.Code == code.ToString())?.Name;
        }
    }

Создаю консольное приложение и портирую в него эту библиотеку для проверки работоспособности. При запуске получаю ошибку в пути к файлу.

Answer 1

"внутри либы" с точки зрения .net не существует. Исходники компилируются в dll/exe, и где именно исходники лежали изначально - несущественно.

Вам придется, на выбор:

  • Копировать этот файл в папку к exe (руками, или через свойство Copy to output folder для этого файла проекте)
  • Вшивать файл внутрь exe / dll, поменяв ему compilation type с Content на Embedded Resource и доставать его в рантайме через assembly.GetManifestResourceStream.
READ ALSO
Соединение с Oracle RAC через ODP.NET

Соединение с Oracle RAC через ODP.NET

Доброго времени суток!

95
Как получить доступ к UISpite?

Как получить доступ к UISpite?

Есть код, который создаёт объекты с компонентом Image, в котором я хочу заменить Source Image на один из дефолтных, через код

94
Разрешение зависимостей Autofac

Разрешение зависимостей Autofac

Создал текстовый проект консольныйПодтянул autofac

80