我是以编程方式生成SSIS软件包的新手,并且在所生成的组件之一中存在问题。
我正在使用以下代码以编程方式生成脚本任务:
private void EditScriptTask(ref ScriptTask pScriptTask, List<VariablesSsis> variablesSsis)
{
pScriptTask.ScriptProjectName = ScriptTaskProjectName;
// Set the script language - "CSharp"
pScriptTask.ScriptLanguage = VSTAScriptLanguages.GetDisplayName("CSharp");
// Set variables to be used in the script task code (read and write variables)
pScriptTask.ReadWriteVariables = ReadVariableScriptString(variablesSsis);
// Create a new project from the template located in the default path - script task associated project
pScriptTask.ScriptingEngine.VstaHelper.LoadNewProject(pScriptTask.ProjectTemplatePath, null, ScriptTaskProjectName);
//Initialize the designer project, add a new code file, and build
pScriptTask.ScriptingEngine.VstaHelper.Initalize("", true);
pScriptTask.ScriptingEngine.VstaHelper.AddFileToProject("ScriptMain.cs", "file contents");
pScriptTask.ScriptingEngine.VstaHelper.Build("");
// Persist the VSTA project + binary to the task
if (!pScriptTask.ScriptingEngine.SaveProjectToStorage())
{
throw new ArgumentNullException("Save failed");
}
// Replace ScriptMain contents
var contents = GetScriptMainContent();
pScriptTask.ScriptStorage.ScriptFiles["ScriptMain.cs"] = new VSTAScriptProjectStorage.VSTAScriptFile(VSTAScriptProjectStorage.Encoding.UTF8, contents);
// Reload the script project, build and save
pScriptTask.ScriptingEngine.LoadProjectFromStorage();
pScriptTask.ScriptingEngine.VstaHelper.Build("");
//Cleanup
pScriptTask.ScriptingEngine.DisposeVstaHelper();
}
private string GetScriptMainContent()
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "Va.Api.MyServiceSSIS.Infrastructure.Scripts.ScriptMain.txt";
Stream stream = assembly.GetManifestResourceStream(resourceName);
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}
程序包及其中的脚本任务的生成没有问题,但是当我尝试在Visual Studio中运行程序包时,便遇到了问题:
对于脚本任务,它似乎在内部运行代码(使执行成功完成),但实际上却没有。
要解决此问题,我必须打开脚本任务编辑器,单击“编辑脚本”,这将打开Visual Studio和要由脚本任务运行的代码,然后关闭VS,然后在脚本任务编辑器中单击“确定”。 如果执行上述操作,则脚本任务可以正确运行代码,并且没有问题。
我正在使用SQL Server 2014和VS 2013(但是当我打开脚本任务的脚本时,他会打开VS 2012)
有人有类似的问题吗?还是可以给我小费?
我认为这可能是编译问题,但是从理论上讲,我是否已经通过调用Build方法来做到这一点? (如果我查看xml代码,似乎已经建立了二进制代码)
谢谢。