Получить путь к файлу, расположенному в каталоге пакета NuGet, из того же пакета в C # - PullRequest
1 голос
/ 10 октября 2019

У меня есть решение .NET Framework (4.7), которое ссылается на пакет NuGet. Этот пакет NuGet должен читать из файлов html и xml. Оба эти файла находятся в папке пакетов (пакет NuGet), и они НЕ нужны непосредственно решению, а только самому пакету NuGet.

Как я могу ссылаться на эти файлы при запуске решения, котороеиспользует упомянутый пакет NuGet?

Я пытался с ./, но вместо этого все, что он делает, это указывает на корневой каталог моего решения.

Фактический вызов, который я пытаюсь сделать так: File.ReadAllText(path).

Я также попытался установить для свойства Copy to Output Directory файлов значение Copy always и использовать Build Action в качестве Content. Это, например, копирование этих файлов в packages/<package name>/Content/*.html, и я думаю, что каким-то образом я могу получить этот путь, например, решение, приведенное здесь: Программно получить путь к пакету nuget

Нодля меня это кажется сложным для такой, казалось бы, простой задачи. Как правильно это сделать?

Редактировать: переименованный вопрос, чтобы указать, что настройка ресурса не является опцией в этом случае, так как некоторые функции, которые я использую в пакете NuGet, запрашиваютпуть к файлу, а не ресурс.

1 Ответ

2 голосов
/ 10 октября 2019

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

В любом случае, во время выполнения я получу папку, в которой файл .dll будет выглядеть так:

 var currentAssemblyName = Assembly.GetExecutingAssembly().GetName().Name;
 var rootFolder = Assembly.GetExecutingAssembly().Location.Split(currentAssemblyName)[0];

Редактировать - должно работать как для .NET Framework, так и для ядра dotnet

Моя ошибка, чтобы получить реальный путь к DLL, которую нужно найти для сборки, потому что ExecutingAssembly откуда был запущен .exe

 var assembly = AppDomain.CurrentDomain
                          .GetAssemblies()
                          .SingleOrDefault(assembly => assembly.GetName().Name == "my.awsome.nuget");
 var location = assembly.Location; 
...