Я столкнулся с аналогичной проблемой в пакете SSIS, который я написал. Я закончил создание командного файла в скрипте C# и просто вызвал этот командный файл в задачу процесса выполнения.
Мне также нужна была гибкость для добавления пароля, основанного на некоторых параметрах таблицы.
Я понимаю, что это дополнительный шаг, и если бы я разархивировал несколько файлов, это могло бы иметь значение, но для контейнера For-Every, который будет ударять по 5-10 файлам, это не очень важно - и вы можете легко прочитать командный файл, чтобы увидеть, что было запущено.
string exe7z = Dts.Variables["s7ZIPPath"].Value.ToString();;
string zipFile = Dts.Variables["sZIPFile"].Value.ToString();
string outPath = Dts.Variables["sFileLocation"].Value.ToString();
string password = Dts.Variables["sZIPPassword"].Value.ToString();
if (password.Length > 0)
{
password = "-p\"" + password + "\"";
}
if (!(outPath.EndsWith("\\")))
{
outPath = outPath + "\\";
}
string batchFile = outPath + "unzip.bat";
Dts.Variables["sZipBatchFile"].Value = batchFile;
using (StreamWriter writer = new StreamWriter(batchFile))
{
writer.Write("\"" + exe7z + "\" e \"" + zipFile + "\" -o\"" + outPath + "\" -y " + password);
}
Я обнаружил, что при создании переменной, скажем, 'Arguments' и используя выражения, чтобы построить его, и * то * присвоив его свойству, как и вы с WorkingDirectory, гораздо чище, чем подход, строить его на самом компоненте, так как у вас нет возможности проверять конкатенированную строку во время выполнения. – billinkc
большой плохой пример, спасибо –