15

我有一个带有脚本任务的 SSIS 包,当我尝试在本地系统中运行它时出现以下错误。它适用于我的同事以及生产环境。但是,我无法在本地运行它来测试。我在主方法中保留了一个调试点,但从未达到,在它进入主方法之前我得到了错误。

在此处输入图像描述

我正在使用 VS 2010,.Net 框架 4.5。

脚本任务会编译。我收到以下消息 SSIS 包“..\Test.dtsx”开始。错误:0x1 测试:调用目标已引发异常。任务失败:测试 SSIS 包“..\Test.dtsx”完成:成功。程序“[2552] DtsDebugHost.exe:DTS”已退出,代码为 0 (0x0)。

以下是代码:

public void Main()
{
try
{
 LogMessages("Update Bug package execution started at :: " + DateTime.Now.ToLongTimeString());
 LogMessages("Loading package configuration values to local variables.");

strDBConn = Dts.Variables["User::DBConnection"] != null ? Dts.Variables["User::DBConnection"].Value.ToString() : string.Empty;
strTPCUrl = Dts.Variables["User::TPCUrl"] != null ? Dts.Variables["User::TPCUrl"].Value.ToString() : string.Empty;

TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl));
WorkItemStore objWIS = new WorkItemStore(objTPC);
WorkItemCollection objWIC = objWIS.Query("SELECT...");

foreach (WorkItem wi in objWIC)
{
}

}
catch(Exception ex)
{
}

当我评论来自 TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl)); 的代码时 脚本成功执行。但是,如果我保留 TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl)); 并评论其余的,我得到了例外。我确实可以访问该 URL。

我在脚本任务中使用 Microsoft.TeamFoundation.Client.dll 和 Microsoft.TeamFoundation.WorkItemTracking.Client.dll。但是包中的dll版本是10.0,而我的GAC中的dll版本是12.0。这会导致问题吗?

4

7 回答 7

2

当我在 Dts.Variables["User::xxxx].Value(); 中引用传递的 ssis 变量时收到此错误消息,其中 xxxx 不存在并且不是从调用程序传递的。这是一个简单的 Console.Writeline引用一个不存在的传递变量。

于 2019-09-11T22:32:02.987 回答
2

我有同样的问题(即相同的错误代码错误:0x1 ...)。

问题在于从缺少的文件夹中引用的一些库。

删除引用并将它们从正确的路径添加回来解决了这个问题。

与错误代码相关的 Microsoft 参考 ( https://msdn.microsoft.com/en-us/library/ms345164.aspx ) 非常通用,对您没有多大帮助。但是,阅读其他文章很可能表明运行脚本任务的失败原因未知。

  • 十六进制代码:0x1
  • 十进制代码:1
  • 符号名称:DTS_MSG_CATEGORY_SERVICE_CONTROL
  • 说明:功能不正确。
于 2016-03-04T13:06:45.177 回答
2

我通过更改SSIS Project的TargetServerVersion修复了这个错误。

集成服务项目属性页

于 2019-11-14T15:00:34.143 回答
1

这只是一种不同的情况,并不打算成为所有人的全部解决方案。

当我将我的 DLL 安装到 GAC 中时,我忘记以管理员身份运行我的脚本,并且该脚本在没有错误的情况下静默运行,就好像它正在工作一样。

当我意识到那是我做错的事情时,我感到非常愚蠢。希望这可以帮助防止其他人在如此愚蠢的事情上浪费时间。

作为参考,这是我用于将我的 DLL 安装到 GAC 中的方法,我对其进行了修改以告诉我现在何时不以管理员身份运行它:

#https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator
$isAdmin = ([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if($isAdmin -eq $false)
{
    Write-Host "You have to run this script as Administrator or it just won't work!" -ForegroundColor Red

    return;
}

$strDllPath = "C:\PathToYourDllsHere\"

#Note that you should be running PowerShell as an Administrator
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")            
$publish = New-Object System.EnterpriseServices.Internal.Publish            


$arr = @(
    "YourDLL01.dll",
    "YourDLL02.dll",
    "YourDLL03.dll"
)

get-date

foreach($d in $arr)
{
    $p = ($strDllPath + $d);

    $p

    $publish.GacInstall($p);
}

#If installing into the GAC on a server hosting web applications in IIS, you need to restart IIS for the applications to pick up the change.
#Uncomment the next line if necessary...
#iisreset

归功于如何确定您的 PowerShell 脚本是否在管理员模式下运行: https ://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator

于 2019-09-23T16:05:03.263 回答
1

在我的情况下,它缺少 DLL或服务器上没有安装正确的版本。

本地所有测试都很好,但在服务器上Runtime error Exception has been thrown by the target of an invocation不断弹出错误消息。

没有异常处理程序能够捕获该错误 - 脚本任务中的代码甚至不会被执行,只要需要一个 DLL,它不在服务器上的程序集缓存中(它可能发生在本地机器上同样的错误)。

这里的困难是找出缺少的内容,然后更新对正确版本的引用,或者使用gacutil. 我进行调试的方法是删除脚本任务中的部分代码,直到不会出现该错误,然后分析缺少的部分以获取参考。

于 2020-07-24T10:19:13.043 回答
0

在这里的其他答案没有任何运气之后,我终于发现在我的包中,问题是我创建了一个新变量,但没有将它的名称带到我的 C# 脚本的新副本中。变量是用作连接字符串表达式的变量。所以这最终是一个改变的问题:

Dts.Variables["Exists"].Value = File.Exists(Dts.Variables["OldSSISPackageVariableName"].Value.ToString());

至:

Dts.Variables["Exists"].Value = File.Exists(Dts.Variables["NewSSISPackageVariableName"].Value.ToString());

一旦我使它们保持同步,它就可以正常工作。

于 2022-02-09T16:28:47.250 回答
-1

当添加对 dll 版本 12.0.0 的引用并将目标框架更改为 .Net Framework 4.5 时,它已修复

于 2015-03-16T19:31:04.050 回答