Все будет ОК, если вы измените исходный код следующим образом:
if ((cin >> name).get() && std::getline(cin, state))
Расширение ответа Джоша.
Ассембли в .Net загружаются по требованию с помощью CLR. Обычно загрузка сборок не будет предпринята до тех пор, пока не будет выбран метод JIT'd, который использует тип из этой сборки.
Если вы не можете поймать сбой сборки сбоку с помощью блока try / catch в основном методе, скорее всего, вы используете тип из сборки в try / catch. Таким образом, исключение возникает до того, как основной метод будет запущен.
Попробуйте поместить весь код из основного метода в другую функцию. Затем вызовите эту функцию внутри блока try / catch, и вы увидите исключение.
Вы можете использовать AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
}
. Чтобы вручную найти сборку, если она не может найти ее автоматически.