Это правильный способ устранения предупреждения C4945 (символ уже импортирован из другой сборки)? - PullRequest
3 голосов
/ 07 июня 2010

У меня есть решение .net (написанное на C ++ / CLI), которое ссылается на некоторые проекты .dll следующим образом:

MainProject->ProjectA->ProbjectB
MainProject->ProjectB

Первоначально я ссылался на ProjectA и ProjectB из MainProject, который дал мнепредупреждения, как упомянуто выше.

Я могу удалить предупреждения, удалив ссылку на ProjectB из ProjectMain, но это делает менее очевидным, что MainProject полагается на ProjectB.Правильно ли это сделать, чтобы избавиться от предупреждений?

Ответы [ 5 ]

2 голосов
/ 22 июня 2010

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

1 голос
/ 18 августа 2011

Я просто хочу описать, но не объяснить, следуя соответствующему поведению.

  • проект CSCommon в C #
  • проект CS1 в C # с использованием CSCommon
  • проект CPP1 на C ++ с использованием CSCommon
  • проект CPPMain, использующий CPP1

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

1 голос
/ 22 июня 2010

Да, все в порядке.

Если у вас есть ReSharper, вы можете просмотреть график зависимостей, нажав , щелкнув правой кнопкой мыши ProjectMain -> Иерархия проектов .

0 голосов
/ 25 ноября 2014

Нет, удаление ссылки, вероятно, не является правильным способом обработки.

См. https://stackoverflow.com/a/12423588/321013

Установите Use Dependencies in Build=false для ваших ссылок.

Дело в том, что у вас должны быть все ссылки, которые код в самом проекте использует в качестве прямых ссылок, но установка Use Dependencies in Build=TRUE мешает этому, так как она также включает транзитивные ссылки создание конфликтов, если у вас также есть прямые ссылки. (По крайней мере на моем VS2005)

0 голосов
/ 15 июня 2011

У меня была такая же проблема, как и у вас. И я решил это точно так, как вы описали: удалите ссылку на «Проект B» (в вашем конкретном случае). Это единственный способ, которым я знаю, как исправить эту ошибку, если не считать ее отключения.

...