Я создаю проект SSIS через Biml (используя текущую версию BimlExpress на страницу Varigence BimlExpress), которая использует компонент script в рамках задачи потока данных. Проект создается без проблем, однако ошибки, когда он попадает в script Component:
Не удалось загрузить файл или сборку "Microsoft.SqlServer.DTSPipelineWrap, Version = 14.100.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91" или одну из его зависимостей. Система не может найти указанный файл.
в ScriptMain.PreExecute() в Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()
Я вижу эту DLL в GAC, и когда я пытаюсь добавить ссылку вручную, SSIS заявляет, что я не могу добавить ее, поскольку она уже включена в проект.
Однако, если я открою компонент script и вручную Build
он - но ничего не изменит - задача потока данных будет работать без проблем.
Чтобы уточнить, я знаю, что я ничего не изменил, поскольку я воссоздаю этот проект из Biml каждый раз, когда хочу протестировать новый подход, который обеспечивает согласованную базовую линию.
Кто-нибудь знает, почему компонент script, который включает ссылку на dll GAC, будет работать только вручную Built
, но не заранее?
Я использовал этот точный Biml без проблем, хотя и в другой среде. Работа с Visual Studio 2012 с экземпляром SQL Server 2016 еще не существует в Visual Studio 2015 (таргетинг на 2012 год) в отношении экземпляра SQL Server 2016.
Для дальнейшего контекста я также тестировал это вывод проекта SSIS, ориентированного на SQL Server 2012, 2014 и 2016 с тем же сообщением об ошибке.
Update
Вероятно, это проблема с версией dll в проекте как вывод из BimlExpress, поскольку если я вручную создаю папку v4.0_14.100.0.0__89845dcd8080cc91
с dll версии 13 внутри C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.DTSPipelineWrap
, компонент script теперь выдает ошибку с помощью следующее:
System.InvalidCastException: невозможно передать объект COM типа "System.__ ComObject" в тип интерфейса "Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100". Эта операция завершилась неудачно, потому что вызов QueryInterface на COM-компоненте для интерфейса с идентификатором ID ID '{ID удален на всякий случай}' не удалось из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
в Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(исключение e)
в Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()
в Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(обертка IDTSManagedComponentWrapper100)