Я нашел источник проблемы и смог ее решить, но я не уверен в деталях.
В какой-то момент я переключил свой проект DeployDatabaseAssembly на целевой .NET 4.0, и AssemblyBuilder должен был сгенерировать сборку, которая также нацелена на .NET 4.0. Переключение проекта на целевой .NET 3.5 решило проблему.
Что забавно, так это то, что исходная DLL (database.dll), содержащая все мои типы данных, все еще нацелена на .NET 3.5, и была оставлена намеренно, потому что я знал, что SQL Server поддерживает только CLR 2.0 прямо сейчас, что фактически делает ее несовместимой с .NET 4.0, потому что .NET 4.0, кажется, требует CLR 4.0. Используя ILMerge, я комбинировал динамическую сборку, содержащую сгенерированные функции, с моей существующей (.NET 3.5) database.dll. В конечном итоге это привело к гибридной сборке .NET 4.0, которая была основана главным образом на функциях и классах .NET 3.5. Странно, что мне удалось заставить работать функции, использующие базовые параметры типа «String» и «int», но тип SqlString вызывал сбои ... очевидно, потому что он был извлечен из .NET 4.0 System.Data.dll , так как он упоминался как "typeof (SqlString)" в моей DeployDatabaseAssembly, которая предназначалась для .NET 4.0. Просто странно, как это происходило со сбоями без каких-либо сообщений об ошибках или без каких-либо предупреждений о том, что они несовместимы с загруженными модулями SQL CLR.
Хотелось бы, чтобы я знал, как заставить AssemblyBuilder, работающий в приложении .NET 4.0, генерировать сборку, нацеленную на .NET 3.5 ...
Обновление: проблема полностью решена
Я сосредоточился на выводе ILMerge и пошел дальше и переключил DeployDatabaseAssembly обратно на .NET 4.0. Кстати, в своем проекте я использую ILMerge, поскольку это сборка .NET.
Установив опцию ILMerge следующим образом:
ILMerge merger = new ILMerge();
merger.SetTargetPlatform( "v2", @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client");
Полученная DLL развертывается на SQL Server (как и раньше), но на этот раз она фактически работает без ошибок.
Интересно, что если я заменим только «v3.5» в пути целевой платформы на «v4.0» и попытаюсь развернуть сборку на SQL Server, то я получу полезное сообщение об ошибке сразу во время развертывания » CREATE ASSEMBLY для сборки «мое имя сборки» не удалось, так как сборка создана для неподдерживаемой версии среды CLR. ". Странно, что когда я вообще не устанавливал какую-либо целевую платформу, она нормально работала, но вылетала без какого-либо сообщения об ошибке.
Эта таблица суммирует вышеприведенные комбинации конфигурации и результаты:
http://oi53.tinypic.com/muee0z.jpg