Лучшая практика для того, чтобы сохранить и сослаться на библиотеки DLL?

Неустранимая ошибка: Невозможно переопределить класс [имя класса]

Неустранимая ошибка: невозможно обновить [имя функции]

Это означает, что вы либо используете одно и то же имя функции / класса дважды, и вам нужно переименовать один из них, или это потому, что вы использовали require или include, где вы должны использовать require_once или include_once.

Когда класс или функция объявляется в PHP, он неизменен и не может быть позже объявлен с новым значением.

Рассмотрим следующий код:

class.php

<?php

class MyClass
{
    public function doSomething()
    {
        // do stuff here
    }
}

index.php

<?php

function do_stuff()
{
   require 'class.php';
   $obj = new MyClass;
   $obj->doSomething();
}

do_stuff();
do_stuff();

Второй вызов do_stuff() приведет к получению ошибка выше. Изменяя require на require_once, мы можем быть уверены, что файл, содержащий определение MyClass, будет загружен только один раз, и ошибка будет устранена.

25
задан Daniel Mann 18 February 2016 в 17:03
поделиться

5 ответов

Я обычно создаю папку lib в своем проекте, куда я поместил dll's, на который ссылаются. Тогда я указываю на ссылку на dll в папке lib. Таким образом, каждый разработчик может разработать проект после получения от управления исходным кодом.

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

20
ответ дан Travis Collins 28 November 2019 в 21:39
поделиться

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

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

Для больших решений, с 20 + проекты, это делает жизнь намного легче!

4
ответ дан Drew Gaynor 28 November 2019 в 21:39
поделиться

Лучшая практика, которую я ожидал бы, будет иметь Ваш репозиторий SC, включают и осуществляют относительные местоположения ссылочных объектов для Вас (обычно через общий путь), таким образом, Вы не занимаетесь этой проблемой непосредственно. Исходный разработчик должен зарегистрироваться в этой информации.

3
ответ дан dkretz 28 November 2019 в 21:39
поделиться

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

Добавление ссылки DLL полным путем было бы ошибкой разработчика так же, как добавлением, что исходный файл полным путем будет ошибкой.

1
ответ дан Greg Hewgill 28 November 2019 в 21:39
поделиться

Эмпирическое правило : Если проект не является частью решения, ссылка выпустила dlls от управляемого/binshare источника или / каталога lib, который находится под деревом управления исходным кодом Вашего решения. Все внешние зависимости должны были присвоить версию DLLs, которые входят в этот/binshare каталог.

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

Пример: Если Вы используете Блок Применения данных MS в качестве зависимости в Вашем приложении, необходимо сослаться на правильно выпущенный двоичный файл, вместо того, чтобы стать последними от dev исходной соединительной линии MS.

1
ответ дан Daniel Auger 28 November 2019 в 21:39
поделиться
Другие вопросы по тегам:

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