У меня есть проект SSIS, содержащий два пакета. Package1.dtsx должен вызываться Package2.dtsx. При выполнении этого с ExecutePackageTask отладчик открывает второй пакет после его вызова.
Теперь мне нужно адаптировать код, чтобы я использовал не ExecutePackageTask, а ScriptTask. Но тогда отладчик не откроет второй пакет. Package2.dtsx теперь выглядит так:
Вот разные вещи, которые я пробовал в ScriptTask:
public void Main()
{
var parentPackage = (Package)Dts.Variables["System::StartTime"].Parent;
var proj100 = (IDTSProject100)parentPackage.Project;
string packageStreamName = "Package1.dtsx";
// test 1 - using IDTSProject100.GetConfiguredPackageByName
var pkgTest1 = proj100.GetConfiguredPackageByName(packageStreamName);
pkgTest1.InteractiveMode = true;
var res1 = pkgTest1.Execute();
// test 2 - using IDTSProject100.GetPackageByName
var pkgTest2 = proj100.GetPackageByName(packageStreamName);
pkgTest2.InteractiveMode = true;
var res2 = pkgTest2.Execute(pConnections: proj100.GetConnections(), pVariables: proj100.GetVariables(), pEvents: null, pLog: null, pTransaction: Dts.Transaction);
// test 3 - using reflection to get the Project object and then load the package from the PackageItems
System.Reflection.PropertyInfo pInfo = proj100.GetType().GetProperty(
"Project",
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
Project proj = (Project)pInfo.GetValue(proj100, null);
PackageItems pis = proj.PackageItems;
PackageItem childPackageItem = pis[packageStreamName];
Package pkgTest3 = childPackageItem.LoadPackage(null);
pkgTest3.InteractiveMode = true;
var res3 = pkgTest3.Execute();
// test 4 - using a new package added to the current project. This package contains an ExecutePackageTask that calls the child
Package pkgTest4 = new Package();
Executable execPackageTask = pkgTest4.Executables.Add("STOCK:ExecutePackageTask");
var taskHost = (TaskHost)execPackageTask;
var execPkgTask = taskHost.InnerObject as ExecutePackageTask;
execPkgTask.UseProjectReference = true;
execPkgTask.PackageName = packageStreamName;
//var execRes = taskHost.Execute(connections: Dts.Connections, variables: Dts.Variables, events: null, log: null, transaction: Dts.Transaction);
pkgTest4.InteractiveMode = true;
proj.PackageItems.Add(pkgTest4, "test.dtsx");
var res4 = pkgTest4.Execute();
}
Любые идеи, что я мог пропустить? Это вообще возможно?

Execute Packageв коде и используете жестко заданный путь к пакету. Почему бы просто не добавить правильную задачу? Если вы хотите изменить пакет или параметры во время выполнения, используйте выражения - person Panagiotis Kanavos   schedule 16.07.2020// test 4- person casenonsensitive   schedule 16.07.2020DebugModeсамого пакета. Некоторые из свойств, перечисленных в приложении к этому интервью с Дональдом Фармером, по-прежнему видны как системные переменные и доступны для объектов Package в задачах сценария. Но этого нет, по крайней мере, уже нет. - person allmhuran   schedule 20.07.2020