У меня была та же проблема, и я хотел поделиться тем, что нашел, так как это может кому-то помочь:
Причиной в моем случае было то, что сборка была установлена в GAC во время установки какого-либо стороннего приложения.
Если файл DLL находится в GAC, компилятор не потрудится скопировать его в папку назначения, если только вы специально не отметите его как «copy local» с помощью узла «Private» в файле проекта, как упомянуто Junto .
Дело в том, что если вы не добавите этот узел, и вы разрабатываете на одной машине, а собираете на другой, а файл DLL находится только в GAC машины сборки, поведение по умолчанию без частного узла приведет к правильному копированию файла на компьютере разработчика, но не на компьютере сборки.
Большая проблема заключается в том, что на файл DLL нет прямой ссылки, но проект ссылается на второй проект, который, в свою очередь, ссылается на файл DLL. В этом случае вы не можете пометить файл DLL как «локально скопированный» в проекте, так как он на него не ссылается. Поэтому, если файл DLL существует в GAC - он не будет скопирован в вашу выходную папку.
Возможные решения в этом случае:
- Удалите файл DLL из GAC
- Добавить прямую ссылку на файл DLL в конечный проект (ы)
- Повторно подписать файл DLL новым строгим именем, которое будет отличать его от файла DLL в GAC.