Оптимизация сборки решения для Visual Studio - куда поместить файлы DLL?

1110 Это то, чего люди просто не могут ожидать. Предположим, у вас есть этот код:

int x = 5;
foobar(x);

Какое значение x после вызова функции? Большинство людей ожидают, что оно все еще будет 5, поскольку, за исключением неопределенного поведения, оно не может измениться при передаче по значению. В C нет даже передачи по ссылке, поэтому значение всегда будет 5. Теперь в C ++ внезапно происходит передача по ссылке, и только из этого фрагмента кода вы не можете узнать, изменится ли x после вызова функции. Для этого вам нужно взглянуть на фактическую подпись foobar.

Сам по себе он не «опасен», но при плохом использовании может привести к неясному и вводящему в заблуждение коду. Особенно, если у вас есть набор параметров, некоторые из которых не соответствуют параметрам, а некоторые нет, а некоторые имеют вводящие в заблуждение имена. В вашем примере имена параметров содержат out, чтобы указать, что они являются выходными параметрами, и это хороший стиль, который уменьшает эту опасность.

Сравните это со следующим фрагментом отсюда , объясняющим передачу по ссылке, как это происходит в C #:

void Method(ref int refArgument)
{
    refArgument = refArgument + 44;
}

int number = 1;
Method(ref number);
Console.WriteLine(number);
// Output: 45

Здесь вы сразу видите, что он передается по ссылке, потому что он говорит ref number .

5
задан bh213 28 January 2009 в 15:32
поделиться

3 ответа

Мы перенастраиваем выходной каталог проектов быть../../отлаживать (или../../выпускать) Наш освобождает, помещаются в эти каталоги также.

Мы устанавливаем ссылочные пути в каждом проекте быть каталогом Debug или Release соответственно (эта установка сохраняется в пользовательских файлах, так как это - абсолютная, а не относительная ссылка),

Мы сохраняем ссылки проекта как ссылки проекта, Все dll ссылки имеют копию локальная ложная и определенная ложь версии, если они не системный уровень dlls, мы знаем, будет в GAC на всех развернутых машинах.

Это работает, обработка и ручные сборки в имитаторе IDE написали сценарий сборок из командной строки (использующий MSBuild)

Тестовые проекты не для развертывания не направляют свой вывод к централизованному каталогу Debug|Release, они просто используют стандартное местоположение по умолчанию (и действительно используйте копию, локальную для предотвращения проблем с блокировкой),

Версии библиотеки могут быть изменены автоматизированным процессом сборки, заменяющим dlls в каталогах Debug и Release.

4
ответ дан 14 December 2019 в 19:28
поделиться

Я рекомендую создать к..\..\Build, если Ваше приложение распространено через решения. (Если у Вас только есть одно решение, можно рассмотреть..\Build.) Visual Studio, по умолчанию, возьмет ссылочные файлы в, она произвела папку. При создании без VS с помощью MSBuild, тем не менее, необходимо добавить папку сборки как ссылочный путь как показано в примере ниже:

  <Target Name="BuildApp">
    <MSBuild
        Projects="@(ProjectReference)"
        Targets="Rebuild"
        Properties="ReferencePath=..\..\Build;$(LibraryFolder)" >
    </MSBuild>
    <OnError ExecuteTargets="BuildFailed" />
  </Target>

Пример также берет меня к моему второму аргументу. Я не думаю, что необходимо использовать папку сборки в качестве папки библиотеки, так как это может привести к отдельным проектам, ошибочно перезаписывающим блоки библиотеки, например, при помощи Локальной Копии. Необходимо иметь строгий контроль над версиями библиотеки, таким образом, я предлагаю, чтобы Вы сохранили разделенным. (Разработчики должны были бы добавить этот путь в VS как ссылочный путь.)

Можно также принять решение отделиться..\..\Build в..\..\Release и..\..\Debug, как предложено ShuggyCoUk.

1
ответ дан 14 December 2019 в 19:28
поделиться

Мне нравится высокоуровневая установка папки Bin Lib, которая распространена в основанных на Unix системах, способом переместиться в этот тип системы также сделает Вашу жизнь инженера выпуска намного легче также. Создание установщика очень упрощено, только имея необходимость вытащить все из одной папки. Dll затем вошел бы в мусорное ведро..

0
ответ дан 14 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: