У меня возникли проблемы с поиском информации по этой теме, возможно, потому что я не уверен, как сформулировать вопрос. Надеюсь, здесь можно помочь или хотя бы посоветоваться. Эта ситуация может быть только тем, что я сохраняю, но это подталкивает меня, поэтому я подумал, что попрошу о помощи в том, как обойти это.Библиотека требует ссылки на System.Windows.Forms
У меня есть библиотека C#, заполненная служебными классами, используемыми в других сборках. Все мои расширения находятся в этой библиотеке, и это очень удобно. Любые другие библиотеки или исполняемые файлы, которые должны использовать эти классы, должны, естественно, ссылаться на библиотеку.
Но у одного из расширений, которые у меня есть, есть расширение в классе Control, чтобы обрабатывать обновления управления поточной передачей менее запутанно. Как следствие, библиотека утилиты должна ссылаться на System.Windows.Forms.
Проблема в том, что любая библиотека или исполняемый файл, который ссылается на библиотеку утилит, теперь должен иметь ссылку на System.Windows.Forms, либо я получаю ошибку сборки для отсутствующей ссылки. Хотя это не имеет большого значения, кажется, что глупо иметь сборки, которые не имеют ничего общего с элементами управления или формами, которые должны ссылаться на System.Windows.Forms только потому, что библиотека утилит делает особенно, поскольку большинство из них фактически не используют Расширение InvokeAsRequired(), которое я написал.
Я думал о перемещении расширения InvokeAsRequired() в его собственную библиотеку, что позволило бы устранить проблему System.Windows.forms, поскольку только сборки, которые должны были использовать расширение InvokeAsRequired(), уже имели бы ссылку на SWF ... но тогда у меня будет библиотека, в которой есть только одна вещь, которая, вероятно, будет беспокоить меня больше.
Есть ли способ обойти это требование, не отделяя метод «оскорбления» и создавая почти пустую библиотеку? Может быть, компиляция или что-то еще?
- Следует отметить, что «метод нарушения» фактически используется для нескольких проектов, имеющих пользовательский интерфейс. Множество обновлений пользовательского интерфейса, которые я делаю, происходит в результате появления событий и попытки обновить элементы управления формой Windows из другого потока, вызвавшего различные проблемы с пользовательским интерфейсом. Следовательно, метод обработки Invoke при необходимости. (Хотя лично я думаю, что весь шаблон InvokeRequired должен быть завернут в сам элемент управления, а не иметь что-то внешнее, чтобы выравнивание потока в первую очередь).
Ну, хорошо, это не принадлежит в библиотеке. Вы должны сделать все возможное, чтобы полностью избавиться от него. –
См. [Это] (http://stackoverflow.com/a/16364022/643085). Это WPF, но вы можете применить тот же шаблон к приложению winforms. Кстати, да, пожалуйста, немедленно отмените весь свой код от winforms, так как он полностью устарел и бесполезен, и он даже не будет частью будущего .Net –
«он даже не будет частью будущего .Net» - цитируйте, пожалуйста. Официальное заявление Microsoft не было, и это можно было бы толковать в поддержку этой претензии. –