SSIS脚本任务未在内部运行代码但未失败

时间:2018-08-02 09:29:30

标签: c# sql-server ssis packages

我是以编程方式生成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代码,似乎已经建立了二进制代码)

谢谢。

0 个答案:

没有答案