Использование OpenWrap с Scope - PullRequest
0 голосов
/ 30 ноября 2011

Возможно, я не до конца понимаю статью вики о сфере охвата, так что извините, если это звучит глупо.

Введение: У меня есть решение (ABC.sln) с более чем 40 проектами, и я пытаюсь реализовать OpenWrap для управления пакетами.Поэтому я сделал следующее в корневой папке решения:

o init-wrap -all

Это сработало: у меня теперь есть файл с именем SLN.wrapdesc в корневой папке решения.Все файлы .csproj в подпапках содержат строку целей OpenWrap.Затем я продолжил добавлять различные обертки к решению с помощью:

o add-wrap -Name xxx

Опять же, это работало нормально: у меня есть несколько оберток в папке оберток, и сборка не прерывается после удаления старых ссылок изпроекты.

Задача: Все содержимое упаковок предназначено для всех проектов, даже для тех, кто в этом не нуждается.Я хотел бы иметь возможность указать, какие обертки куда, например, AjaxControlToolkit входит только в веб-проекты.

Что я пробовал Сначала я удалил AjaxControlToolkit из wrapdesc:

o remove-wrap AjaxControlToolkit

Это приводит к сбою сборки (как и ожидалось).Тогда я попробовал следующее:1. Попробуйте добавить обертку с областью действия:

o add-wrap -Name AjaxControlToolkit -scope webproject

Это просто поместит обертку в папку оберток.Затем я добавил <OpenWrap-Scope>customscope</OpenWrap-Scope> в файл проекта, но сборка все еще не работает.2. Попробуйте вручную добавить файл с именем ABC.webproject.wrapdesc в корневую папку.Это вызывает следующую ошибку, когда я пытаюсь открыть решение:

The "exists" function only accepts a scalar value, but its argument "@(_WrapFile->'%(FullPath)')" evaluates to "D:\Projects\ABC.webproject.wrapdesc;D:\Projects\ABC.wrapdesc" which is not a scalar value.

Я думаю, ему не нравятся 2 файла wrapdesc.Это странно, потому что вики говорят: «... вы можете добавить второй дескриптор вместе с дескриптором по умолчанию ...»

Так что я застрял.У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 30 ноября 2011

Файл per-msbuild на самом деле не рекомендуется для управления зависимостями. Делать это для каждого проекта - не совсем философия дизайна OpenWrap, поэтому система не совсем оптимизирована для этих сценариев.

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

При этом add-wrap -scope newscope создаст дополнительный файл .wrapdesc, который добавит новую зависимость в новую область, создав файл myProject.newscope.wrapdesc независимо от исходного myProject.wrapdesc.

Если вы хотите сделать это для каждого проекта, пытались ли вы использовать основанную на соглашении область видимости? Что-то вроде:

directory-structure: src\*{scope: Web=WebProjects}*

Возьмет любой проект в дочерней папке src, содержащей имя Web, и назначит их области действия WebProjects.

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

Настройка самого файла msbuild не полностью протестирована (и запись в вики была скорее проектной спецификацией, а не окончательной документацией, не все были построены таким образом), поэтому она может работать или не работать. Рад посмотреть, если вы можете открыть билет на ошибку http://github.com/openrasta/openwrap/issues

...