Вы не добавляете неуправляемые библиотеки DLL в качестве ссылок; это работает только для управляемых DLL, написанных на языке .NET.
Если вы используете C #, P / Invoke - ваш единственный вариант. Да, сложность и время, затрачиваемое на это, будут увеличиваться пропорционально сложности библиотеки. Вы должны будете убедиться, что есть управляемые эквиваленты всех типов данных, используемых библиотекой, определяя их самостоятельно в случае необходимости. К сожалению, я не знаю ни одного способа автоматизации этого процесса.
Если вариант перехода на C ++ / CLI является опцией, вам будет гораздо проще, поскольку вы можете напрямую использовать неуправляемую библиотеку, смешивая ее с вашим кодом .NET.