ryanba29 Ответов: 2

Есть ли способ сделать ссылку от проекта к проекту в visual studio и по-прежнему поставлять продукт только с необходимыми библиотеками?


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

В последнее время мои обязанности расширились от простой поддержки библиотеки до непосредственной работы над продуктом компании flag ship. Этот продукт выпускается в виде модулей, настроенных в соответствии с потребностями клиентов. Таким образом, каждый клиент получает основные компоненты, а затем только библиотеки, поставляемые вместе с заказанными модулями. Компания сделала это по двум причинам. Во-первых, это затрудняет декомпиляцию наших библиотек, а во-вторых, уменьшает размер периодически выпускаемых обновлений.

В результате почти все библиотеки are поздно связаны через рефлексию. Это очень затруднило работу с текущей версией каждой библиотеки. Есть ли способ сделать ссылку проект-проект в Visual Studio и по-прежнему поставлять продукт только с необходимыми библиотеками?

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

Что я уже пробовал:

Пробовал гуглить, кодировать проект и переполнять стек.

2 Ответов

Рейтинг:
2

Afzaal Ahmad Zeeshan

Клиенты на самом деле не заботятся об исходном коде или о том, какие инструменты вы используете для написания исходного кода программного обеспечения. Главное, чтобы должен быть предоставленным-это зависимость исполняемого файла. Если исполняемому файлу что-то нужно (например, dll для библиотеки), он должен быть доступен. Если вы не хотите делиться библиотеками, то убедитесь, что execute может работать изначально — без необходимости в среде выполнения или библиотеке, что в .NET framework действительно очень сложная работа, и вы также теряете большую часть переносимости.

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

Если вы хотите сделать его более трудным для декомпиляции (in .NET конечно), вы можете захотеть воспользоваться некоторыми другими услугами, такими как приложение Dotfuscator[^], что позволило бы вам затруднить конечному пользователю декомпиляцию библиотек или других программных пакетов, которые доставляются на их машины. Но знайте, что они все еще могут декомпилировать максимум сборок.

Если сборки, которые вы написали, зависят от других сборок, то к ним также применяются лицензии. Убедитесь, что вы также соблюдаете эти лицензии — например, делитесь программным обеспечением как есть. Наконец, у пользователя все еще есть шанс взломать код и посмотреть, что там написано.

Рефлексия, с другой стороны, не гарантирует, что вы можете просто уйти и не декомпилировать код. Отражение имеет и другие применения... Ну, в вашем случае он просто не был использован должным образом. :-)


ryanba29

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

Рейтинг:
17

johannesnestler

Это зависит от того, можете ли вы изменить свой ручной механизм подключаемых модулей (как я понимаю, вы достигли здесь своими сборками с «поздним связыванием») на более управляемую структуру подключаемых модулей. Вы когда-нибудь использовали MEF - это часть .NET и довольно проста в управлении - у меня есть аналогичная функция для наших клиентов, где клиентские библиотеки загружаются автоматически MEF + VS знает об этом и может их обновлять - я работаю с обычным проектом ссылки во время Desing-Time и для быстрой отладки (я настроил «каталог» MEF, чтобы найти свои сборки в папках проекта для DEBUG, и настроенную папку «Plugin» в конфигурации RELEASE - как в целевых системах). Заинтересовавшись таким подходом, я могу поделиться еще некоторыми "идеями";)


ryanba29

Йоханнес Нестлер, похоже, это то решение, которое мне было нужно. Дайте мне сдачу, чтобы проверить это, прежде чем я приму ваше решение. Спасибо за ваше предложение.