Я использую tSQLt в решении, содержащем несколько проектов базы данных SQL Server. Для каждого проекта есть проект .Test, который ссылается на исходный и источник tSQLt.
Вот краткий план решения:
Решение
- Проект
DB1
- Проект
DB1.Test
- Проект
DB2
- Проект
DB2.Test
- Проект
TSQLT
Где
- Проект
DB2
зависит от проекта DB1
- Проект
DB1.Test
зависит от DB1
и TSQLT
(используется опция «Та же база данных»)
- Проект
DB2.Test
зависит от DB2
и TSQLT
(с использованием опции «Та же база данных») и от DB1.Test
(тот же сервер, другая база данных с переменной). поскольку DB1.Test
зависит от DB1
и TSQLT
, этот проект также зависит от них (используется та же переменная, что и для DB1.Test
).
Проблема в том, что ссылка на DB1.Test
не возвращает объекты TSQLT
и DB1
, когда на нее ссылаются из DB2.Test
, поэтому я получаю огромный список предупреждений о неразрешенных ссылках.
Предупреждения, связанные с DB1
, могут быть устранены путем ссылки на этот проект с использованием той же переменной, что и DB1.Test
, но здесь уже упоминается TSQLT
, и когда я пытаюсь сослаться на него дважды, это приводит к ошибке «дублирующаяся ссылка».
Очевидным решением было бы сделать копию проекта TSQLT в решении, но, честно говоря, я просто не хочу дублировать код.
Другой вариант - построить этот проект с использованием разных конфигураций и просто ссылаться на файлы .dacpac
, но это похоже на взлом.
Мы теоретически могли бы вывести проект TSQLT за пределы решения и иметь несколько копий файла dacpac
и ссылаться на них, однако я стараюсь хранить все в одном месте.
В настоящее время у нас нет репозиториев NuGet, поэтому распространение кода с использованием пакетов NuGet для поддержания этой части в актуальном состоянии также не работает.
Я пытался ссылаться на него дважды, но с разными именами переменных, это все равно приводит к ошибке дублирования ссылки.
Мне известно, что неразрешенные ошибки ссылок в сценарии с вложенными ссылками можно устранить, добавив все уровни в проект в качестве ссылки, но в этом случае один из проектов используется дважды, а дублирование не допускается.
Есть ли какое-либо решение для переноса ссылок, когда есть вложенные ссылки?
Или сохранить локальную копию файла dacpac, сгенерированного во время сборки, под пользовательским (уникальным) именем при копировании из одного проекта в другой во время сборки?
Обратите внимание, что циклические ссылки отсутствуют, просто в решении используется несколько уровней проекта, и без ссылки на TSQLT для всех экземпляров сборка работает просто отлично, только предупреждения раздражают.
Мне известна опция «подавлять предупреждения», но я бы хотел, чтобы они были отключены. (Это не заставит объект волшебным образом появляться в IntelliSense).
Включение или отключение параметра «Локальное копирование» в этом случае не влияет на поведение.