Получение ошибки FileNotFoundException при вызове ActiveX в задаче сценария SSIS

Мне нужно вызвать ActiveX в моем пакете SSIS, поэтому я использую задачу сценария и пишу следующий сценарий C #:

public void Main()
{
    clsAptFdbReader objFdbReader = new clsAptFdbReader("UnitedStates20000830.fdb");
    objFdbReader.OpenFdb(false);
    Dts.TaskResult = (int)ScriptResults.Success;
}

Получите ошибку:

Ошибка: System.Reflection.TargetInvocationException: исключение было создано целью вызова. ---> System.IO.FileNotFoundException: не удалось загрузить файл или сборку Interop.APTFDBReader, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null или одну из его зависимостей. Система не может найти указанный файл. Имя файла: 'Interop.APTFDBReader, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null' в ST_320325ad8e2543f09ee688d809f58ee7.csproj.ScriptMain.Main ()

=== Информация о состоянии предварительной привязки === ЖУРНАЛ: Пользователь = SHINETECHCHINA \ xugy LOG: DisplayName = Interop.APTFDBReader, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null (полностью указан) LOG: Appbase = file: /// C: / Program Files / Microsoft SQL Server / 100 / DTS / binn / LOG: Initial PrivatePath = NULL Вызывающая сборка: (Неизвестно). === LOG: Эта привязка начинается в контексте загрузки по умолчанию. ЖУРНАЛ: использование файла конфигурации приложения: C: \ Program Files \ Microsoft SQL Server \ 100 \ DTS \ binn \ DtsDebugHost.exe.Config LOG: использование файла конфигурации компьютера из c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ config \ machine.config. ЖУРНАЛ: Политика не применяется к ссылке в настоящее время (частная, настраиваемая, частичная или привязка сборки на основе местоположения). ЖУРНАЛ: Попытка загрузки нового файла URL: /// C: / Program Files / Microsoft SQL Server / 100 / DTS / binn / Interop.APTFDBReader.DLL. ЖУРНАЛ: Попытка загрузки нового файла URL: /// C: / Program Files / Microsoft SQL Server / 100 / DTS / binn / Interop.APTFDBReader / Interop.APTFDBReader.DLL. ЖУРНАЛ: Попытка загрузки нового файла URL: /// C: / Program Files / Microsoft SQL Server / 100 / DTS / binn / Interop.APTFDBReader.EXE. ЖУРНАЛ: попытка загрузки нового файла URL: /// C: / Program Files / Microsoft SQL Server / 100 / DTS / binn / Interop.APTFDBReader / Interop.APTFDBReader.EXE.

--- Конец внутренней трассировки стека исключений --- в System.RuntimeMethodHandle._InvokeMethodFast (цель объекта, аргументы Object [], SignatureStruct & sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) в System.RuntimeMethodHandle.InvokeMethod (аргументы target, ObjectFandle.InvokeMethod , Подпись подписи, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, связыватель Binder, параметры Object [], культура CultureInfo, логическое значение skipVisibilityChelection.Infod , BindingFlags invokeAttr, связыватель связывания, параметры объекта [], культура CultureInfo) в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, связыватель связывания, цель объекта, Object [] providedArgs, модификаторы ParameterModifier [], культура CultureInfo, String [] namedParams) в System.Type.InvokeMember (имя строки, BindingFlags invokeAttr, Binder binder, Object target, Object [] args, CultureInfo culture) в Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript ()


person Liu Peng    schedule 28.08.2009    source источник
comment
После того как я вручную скопирую Interop.APTFDBReader.DLL в C: / Program Files / Microsoft SQL Server / 100 / DTS / binn /, проблема будет устранена. Это единственное решение для устранения этой проблемы? Я пытаюсь установить Interop.APTFDBReader.DLL в GAC, но он должен иметь строгое имя, а Interop.APTFDBReader.DLL создается автоматически.   -  person Liu Peng    schedule 28.08.2009
comment
Аналогичная проблема с автоматически сгенерированным Interop.MapPoint! Решена вашим комментарием! Спасибо!   -  person michele    schedule 06.02.2012


Ответы (1)


Вы можете сгенерировать взаимодействие как часть своей сборки с помощью TLBIMP.EXE и указать ему аргументы для создания строгого имени.

Я не уверен, разумно ли устанавливать это взаимодействие в GAC, если оно основано на стороннем COM-сервере?

person Kim Gräsman    schedule 06.09.2009