Могу ли я узнать местоположение папки пакетов для текущего решения при применении xdt?
Я хочу установить плагин времени разработки для расширения Visual Studio (т.е. работает при использовании Visual Studio, а не при запуске приложения). Это требует, чтобы я изменил app.config с записью, указывающей на dll, содержащую код расширения. Плагин устанавливается через Nuget, и если я добавлю эту DLL в папку под проектом и использую фиксированный путь в app.config.install.xdt, то все будет нормально. Однако я хочу, чтобы xdt вставил значение, которое указывает на dll в папке пакетов, где он устанавливается через nuget. Моя проблема в том, что относительный путь к папке nuget не является фиксированным для проектов. Каждый проект может находиться в отдельной папке (несколько папок глубоко внутри папки решения), а не просто в прямом дочернем элементе папки решения, поэтому я хочу иметь возможность использовать некоторую переменную в моем xdt.
В настоящее время у меня есть это в моем XDT:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<specFlow>
<plugins xdt:Transform="InsertIfMissing">
<add name="NCrunch.Generator" path=".\SpecflowPlugins\" type="Generator" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)"/>
</plugins>
</specFlow>
</configuration>
но я хочу что-то вроде этого:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<specFlow>
<plugins xdt:Transform="InsertIfMissing">
<add name="NCrunch.Generator" path="$(SolutionDir)\packages\Specflow.Ncrunch.1.0.0\lib\net" type="Generator" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)"/>
</plugins>
</specFlow>
</configuration>
это возможно в xdt? Если нет, есть ли другой способ заставить его корректно выполнить app.config при установке моего пакета nuget?
1 ответ
Синтаксис XDT не позволяет заменять токены, такие как тот, который вы указали в своем примере.
Один из вариантов, который я могу придумать, - это изменить файл app.config.install.x dt в вашем скрипте init.ps1 PowerShell, заменив токены для фактических значений до того, как преобразование XDT будет применено NuGet.
Для получения дополнительной информации о init.ps1 см.: Создание и публикация пакета.