Ошибка выполнения. Исключение было выдано целевым объектом вызова из задачи «Сценарий»

У меня есть пакет SSIS с задачей сценария, я получаю следующую ошибку, когда пытаюсь запустить его в своей локальной системе. Он отлично работает как для моих коллег, так и в продакшене. Однако я не могу запустить его локально для тестирования. Я сохраняю точку отладки в основном методе, но она никогда не достигается, я получаю сообщение об ошибке до того, как она переходит в основной метод.

введите описание изображения здесь

Я использую VS 2010, .Net framework 4.5.

Задача сценария компилируется. Я получаю следующие сообщения: запускается пакет SSIS ".. \ Test.dtsx". Ошибка: 0x1 в тесте: исключение было создано целью вызова. Ошибка задачи: проверка пакета SSIS ".. \ Test.dtsx" завершена: успешно. Программа «[2552] DtsDebugHost.exe: DTS» завершилась с кодом 0 (0x0).

Вот код:

public void Main()
{
try
{
 LogMessages("Update Bug package execution started at :: " + DateTime.Now.ToLongTimeString());
 LogMessages("Loading package configuration values to local variables.");

strDBConn = Dts.Variables["User::DBConnection"] != null ? Dts.Variables["User::DBConnection"].Value.ToString() : string.Empty;
strTPCUrl = Dts.Variables["User::TPCUrl"] != null ? Dts.Variables["User::TPCUrl"].Value.ToString() : string.Empty;

TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl));
WorkItemStore objWIS = new WorkItemStore(objTPC);
WorkItemCollection objWIC = objWIS.Query("SELECT...");

foreach (WorkItem wi in objWIC)
{
}

}
catch(Exception ex)
{
}

Когда я прокомментировал код из TfsTeamProjectCollection, objTPC = new TfsTeamProjectCollection (новый Uri (strTPCUrl)); Скрипт успешно выполняется. Однако, если я сохраню TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection (новый Uri (strTPCUrl)); и прокомментируйте остальное, я получаю исключение. У меня есть доступ к URL-адресу.

Я использую Microsoft.TeamFoundation.Client.dll и Microsoft.TeamFoundation.WorkItemTracking.Client.dll в своей задаче сценария. Однако версия dll в пакете - 10.0, а версия dll в моем GAC - 12.0. Это вызовет проблемы?


person perplexedDev    schedule 11.03.2015    source источник
comment
Мы тоже недоумеваем. Возможно, это из-за отсутствия кода в вопросе. В противном случае мы не сможем дать авторитетный ответ. Это вероятно, на тех машинах установлено специальное программное обеспечение DLL / стороннего производителя, которого нет на вашем, но это просто предположение.   -  person billinkc    schedule 12.03.2015
comment
Вау, это не дает тебе особого повода для продолжения, не так ли? Просматривали ли вы все сообщения, которые записываются в окно DEBUG, когда вы запускаете его (в режиме отладки) в SSDT? Это будет ваш лучший выбор для поиска подсказок относительно того, чем на самом деле было исключение, созданное целью вызова.   -  person Ann L.    schedule 12.03.2015
comment
Кроме того, можете ли вы убедиться, что задача сценария будет компилироваться на вашем компьютере?   -  person Ann L.    schedule 12.03.2015
comment
Задача сценария компилируется. Я получаю следующие сообщения: Пакет SSIS .. \ Test.dtsx запускается. Ошибка: 0x1 в тесте: исключение было создано целью вызова. Ошибка задачи: Проверить пакет SSIS .. \ Test.dtsx завершено: Успешно. Программа «[2552] DtsDebugHost.exe: DTS» завершилась с кодом 0 (0x0).   -  person perplexedDev    schedule 12.03.2015
comment
Я хотел выяснить, что мне нужно проверить, так как код в порядке, поскольку он работает для других. Отладчик не попадает в основной метод, поэтому не уверен, какой код мне нужно предоставить.   -  person perplexedDev    schedule 12.03.2015
comment
Ошибок не показывает, компилируется успешно   -  person perplexedDev    schedule 12.03.2015
comment
Либо вам нужно опубликовать код, либо просмотреть свои ссылки и посмотреть, нет ли там чего-то нормального.   -  person billinkc    schedule 12.03.2015
comment
Я использую Microsoft.TeamFoundation.Client.dll и Microsoft.TeamFoundation.WorkItemTracking.Client.dll в своей задаче сценария. Однако версия dll в пакете - 10.0, а версия dll в моем GAC - 12.0. Это вызовет проблемы?   -  person perplexedDev    schedule 12.03.2015
comment
Если это задача сценария, вы можете создать на его основе простое консольное приложение в Visual Studio, попробовать это и увидеть ошибку, когда вы ее получите. Я считаю, что вышеупомянутое исключение возникает, когда вы пытаетесь вызвать что-то, что вы не можете.   -  person Jeswin    schedule 13.03.2015
comment
Я добавил код, если у меня есть эта строка TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection (новый Uri (strTPCUrl)); Я получаю сообщение об ошибке.   -  person perplexedDev    schedule 16.03.2015


Ответы (6)


У меня была такая же проблема (т.е. такой же код ошибки: 0x1 ...).

Проблема заключалась в том, что некоторые библиотеки ссылались на отсутствующую папку.

Удаление ссылок и добавление их обратно с правильного пути решило проблему.

Справочник Microsoft (https://msdn.microsoft.com/en-us/library/ms345164.aspx), связанный с кодом ошибки, очень общий и мало помогает. Однако при чтении других статей весьма вероятно, что это указывает на неизвестную причину сбоя при запуске задачи «Сценарий».

  • Шестнадцатеричный код: 0x1
  • Десятичный код: 1
  • Символическое имя: DTS_MSG_CATEGORY_SERVICE_CONTROL
  • Описание: Неправильная функция.
person Ylli Prifti    schedule 04.03.2016

Я исправил эту ошибку, изменив TargetServerVersion в проекте SSIS.

Страницы свойств проекта служб интеграции

person Nicholas Emond    schedule 14.11.2019
comment
Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее: добавьте контекст вокруг ссылки, чтобы ваши друзья-пользователи имели некоторое представление о том, что это такое и почему она там, а затем процитируйте наиболее релевантную часть страницы, на которую вы ссылаетесь. в случае, если целевая страница недоступна. Ответы, которые представляют собой не более чем ссылку, могут быть удалены. - person xiawi; 14.11.2019

В моем случае это были отсутствующие библиотеки DLL или неправильная версия, установленная на сервере.

Локально все тесты прошли нормально, но на сервере продолжало появляться сообщение об ошибке Runtime error Exception has been thrown by the target of an invocation.

Никакой обработчик исключений не сможет отловить эту ошибку - код в задаче сценария даже не будет выполнен, как только потребуется библиотека DLL, которой нет в кеше сборки на сервере (это могло произойти на локальном компьютере. тоже с той же ошибкой).

Сложность здесь заключается в том, чтобы выяснить, чего не хватает, а затем либо обновить ссылки на правильную версию, либо установить недостающую DLL в кеш сборки с помощью gacutil. Мой подход к отладке заключался в том, чтобы удалить части кода в задаче сценария, пока эта ошибка не исчезнет, ​​а затем проанализировать недостающую часть на предмет ссылок.

person casenonsensitive    schedule 24.07.2020

Исправлено, когда добавлена ​​ссылка на dll версии 12.0.0 и изменена Target Framework на .Net Framework 4.5.

person perplexedDev    schedule 16.03.2015

Я получил это сообщение об ошибке, когда упомянул переданную переменную ssis в Dts.Variables ["User :: xxxx] .Value (); где xxxx не существует и не был передан из вызывающей программы. Это была простая Console.Writeline ссылаясь на переданную переменную, которой не было.

person renaissanceMan    schedule 11.09.2019

Это просто другая ситуация, и она не предназначена для того, чтобы стать окончательным решением для всех.

Когда я устанавливал свои библиотеки DLL в GAC, я забыл запустить свой сценарий от имени администратора, и сценарий работал без ошибок, как если бы он работал.

Я почувствовал себя действительно глупо, когда понял, что поступил неправильно. Надеюсь, это поможет другим людям не тратить время на такую ​​глупость.

Для справки это то, что я использую для установки своих DLL в GAC, и я изменил его, чтобы сообщить мне, когда я сейчас не запускаю его как администратор:

#https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator
$isAdmin = ([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if($isAdmin -eq $false)
{
    Write-Host "You have to run this script as Administrator or it just won't work!" -ForegroundColor Red

    return;
}

$strDllPath = "C:\PathToYourDllsHere\"

#Note that you should be running PowerShell as an Administrator
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")            
$publish = New-Object System.EnterpriseServices.Internal.Publish            


$arr = @(
    "YourDLL01.dll",
    "YourDLL02.dll",
    "YourDLL03.dll"
)

get-date

foreach($d in $arr)
{
    $p = ($strDllPath + $d);

    $p

    $publish.GacInstall($p);
}

#If installing into the GAC on a server hosting web applications in IIS, you need to restart IIS for the applications to pick up the change.
#Uncomment the next line if necessary...
#iisreset

Благодарность за то, как определить, работает ли ваш сценарий PowerShell в режиме администратора или нет: https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator

person dyslexicanaboko    schedule 23.09.2019