Как использовать пакет nuget, в котором нет библиотеки, а используются только файлы - PullRequest
0 голосов
/ 31 января 2019

Я установил пакет nuget (скажем, 'foo', версия = 1.0.4) в моем проекте на C #, в котором есть только несколько файлов данных и нет библиотеки, поэтому на него нельзя ссылаться в проекте.Файлы находятся в расположении по умолчанию для пакета nuget ({proj loc}\packages\foo.1.0.4\lib\net45\).Как я могу правильно обращаться к этим файлам / читать их в коде C #?

Я знаю, что могу получить к ним доступ, указав их физический путь на диске, например,

string filePath = $"{Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))}\\packages\\foo.1.0.4\\lib\net45\\bar.ttf";

Но я неВы хотите сделать это, поскольку часть пути жестко запрограммирована, и это изменится, когда будет установлена ​​более новая версия пакета nuget 'foo' (т.е. эта часть '\ foo.1.0.4 \').

ОБНОВЛЕНИЕ: Я нашел полностью динамическое решение, пожалуйста, посмотрите на https://stackoverflow.com/a/54459367/1300390

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Из вашего комментария:

Может быть нет.из сценариев, в которых использование пакета nuget может оказаться весьма эффективным и разумным для не-lib файлов, например, в нашем случае эти файлы создаются другим проектом, а no.других клиентских проектов необходимо включать / использовать эти файлы, если они нужны, наряду с возможностью получать их обновленные версии по мере их доступности, а управление пакетами nuget в этом случае обеспечивает хорошо организованный механизм.

Одним из решений является создание тонкослойной библиотеки с интерфейсом для доступа к этим файлам (упакуйте ее в один и тот же nuget).

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

0 голосов
/ 31 января 2019

После игры с различными подходами и попытками, наконец, я понял следующий, который довольно неплохо решает эту проблему:

Файлы из папки загрузки по умолчанию пакета nuget могут быть доступны / прочитаны без определения каких-либо изменяющихсяжестко запрограммированная часть как:

string appDir = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));
string filePath = Directory.GetFiles(appDir, "baar.ttf", SearchOption.AllDirectories).First();

ОБНОВЛЕНИЕ:

Чтобы сделать это немного быстрее, пространство поиска можно уменьшить в папку «пакеты»только как:

string nugetPackagesDir = $"{Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))}\\packages";
string filePath = Directory.GetFiles(nugetPackagesDir, "baar.ttf", SearchOption.AllDirectories).First();
0 голосов
/ 31 января 2019

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

MyProj - MyTiffStorage (Новая папка)

И изменитьваш код соответственно указывать на этот каталог.Но в этом случае вам нужно быть внимательным, чтобы копировать файлы из пакета (... lib \ net45) при каждом обновлении пакета.

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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...