toing awssdk.core.dll , только в качестве примера мы можем создать отсутствующую ошибку DLL по любому:
[*] Переход в каталог c: \ program files (x86) \ microsoft sql server \ 130 \ dts \ binn \ и переименовать awssdk.core.dll to to to to to to to to to to to to to to to Awssdk.core.dll.bak . Таким образом, система не может найти DLL для связывания. Таким образом, мы можем произвести ошибку для тестирования на Visual Studio, но не при развертывании SQL Server. >
Если задача скрипта использует следующий исходный код, RegionendPoint region = regionendpoint.useast1; < /code> требует библиотеки AWS, поэтому отсутствие DLL приведет к следующему сообщению об ошибке в Visual Studio, без четкого указания. < /P>
at system.runtimemethodhandle.invokemethod (цель объекта, объект [] аргументы, подпись Sig, Boolean Constructor)
at system.reflection.runtimemethodinfo.unsafeinvokeinternal (Object obj, Object [] Параметры, Object [] аргументы)
at system.reflection.runtimemethodinfo.invoke (объект obj, bindingflags invokeattr, связующее связующее, объект [] параметры, культура -культура)
at system. Runtimetype.invokemember (string name, bindingflags bindingflags, связующее связующее, цель объекта, объект [] Предоставлены, параметры, модификаторы ParameterModifier [], культура культуры, String [] nameParams)
at microsoft.sqlserver.dts.tasks.scripttask.vstataskscriptingengine.executcript ()
< /p>
< /blockquote>
Код: Выделить всё
public void Main()
{
try
{
RegionEndpoint region = RegionEndpoint.USEast1;
bool fireAgain = false;
Dts.Events.FireInformation(0, "Test", region.SystemName, string.Empty, 0, ref fireAgain);
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Error", ex.Message, string.Empty, 0);
throw;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
< /code>
Мы предпочитаем видеть исключение отсутствующего DLL, и благодаря счастливой случайности мы нашли обходной путь на 1) изменить функции на асинхро Внутри main () Итак, не очень элегантно, нам нужно изменить исходный код на следующее:
Код: Выделить всё
#pragma warning disable CS1998
public async System.Threading.Tasks.Task Main()
#pragma warning restore CS1998
{
try
{
this.ScriptAction().GetAwaiter().GetResult();
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Error", ex.Message, string.Empty, 0);
throw;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
#pragma warning disable CS1998
async System.Threading.Tasks.Task ScriptAction()
#pragma warning restore CS1998
{
RegionEndpoint region = RegionEndpoint.USEast1;
bool fireAgain = false;
Dts.Events.FireInformation(0, "Test", region.SystemName, string.Empty, 0, ref fireAgain);
}
< /code>
Наш вопрос < /h5>
Мы все еще не понимаем, почему приведенный выше обходной путь может точно вернуть исключение Отсутствует DLL, например, [файл не найден] Ошибка: отсутствует требуемая сборка: awssdk.core, версия = 3.3.0.0, культура = нейтраль, PublickeyToken = 885c28607f98e604 Как видите. Мы должны подавлять предупреждения компилятора с помощью #pragma warning Disable CS1998 , а также, насколько нам известно, задача сценария SSIS не поддерживает Async/wait очень хорошо, и у нас на самом деле нет никакой асинхронной работы в логике. Итак, это лучше? Если да, то как это предотвратить?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -missing-d