Благодаря развертыванию нескольких проектов в большой организации с большим количеством бюрократизма, MSI оказалась лучшим решением.С точки зрения импорта самого проекта, а не инструмента развертывания, это возможность выполнить импорт через командную строку, вызываемую из msi:
[RunInstaller(true)]
public partial class CustomInstaller : System.Configuration.Install.Installer
{
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
string InstallPath = System.IO.Path.GetDirectoryName(this.Context.Parameters["assemblyPath"]) + @"\";
string SqlServer = Context.Parameters["SqlServer"];
SsisInstaller.ImportPackage(InstallPath + "MyProject.dtsx", "MyProject", SqlServer);
}
}
public class SsisInstaller
{
public static void ImportPackage(string packagePath, string packageName, string sqlServer)
{
ProcessStartInfo ProcessStartInfo = new ProcessStartInfo(@"""c:\program files\Microsoft SQL Server\100\DTS\Binn\dtutil.exe""");
ProcessStartInfo.Arguments = @" /File """ + packagePath + @""" /Copy SQL;" + packageName + " /Q /DestS " + sqlServer;
Process.Start(ProcessStartInfo);
}
}
Как видите, добавлен шаг пользовательского интерфейсав проект установщика и передается через контекст, чтобы пользователь мог указать имя экземпляра служб SSIS.Также полезно развертывать задания агента Sql в виде сценария .sql вместе с другими зависимостями sql, но массовое развертывание сценариев sql является более общей проблемой.