我有一个带有脚本任务的SSIS包,当我尝试在本地系统中运行它时出现以下错误。它适用于我的同事和生产。但是,我无法在本地运行它来进行测试。我在main方法中保留了一个调试点,但它永远不会到达,我在进入main方法之前得到了错误。
我正在使用VS 2010,.Net framework 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));并评论其余的,我得到例外。 我可以访问该网址。
我在我的脚本任务中使用Microsoft.TeamFoundation.Client.dll和Microsoft.TeamFoundation.WorkItemTracking.Client.dll。但是,程序包中的dll版本是10.0,而我的GAC中的dll版本是12.0。这会导致问题吗?
答案 0 :(得分:2)
我有同样的问题(即相同的错误代码错误:0x1 ......)。
问题在于从丢失的文件夹中引用了一些库。
删除引用并从正确的路径添加它们修复了问题。
与错误代码相关的Microsoft参考(https://msdn.microsoft.com/en-us/library/ms345164.aspx)非常通用,对您没有多大帮助。 但是,阅读其他文章很可能表明运行脚本任务的未知失败原因。
答案 1 :(得分:1)
我通过更改 SSIS项目的 TargetServerVersion 修复了此错误。
答案 2 :(得分:1)
就我而言,这是缺少DLL 或服务器上没有安装正确的版本。
在本地进行的所有测试都很好,但是在服务器上,错误消息Runtime error Exception has been thrown by the target of an invocation
不断弹出。
没有异常处理程序能够捕获该错误-脚本任务中的代码甚至在需要DLL时也不会执行,而该DLL不在服务器的程序集缓存中(它可能会在本地计算机,也有相同的错误。
这里的困难是找出丢失的内容,然后将引用更新为正确的版本,或者使用gacutil
在程序集缓存中安装丢失的DLL。我进行调试的方式是删除脚本任务中的代码部分,直到不会出现该错误为止,然后分析缺少的部分以供参考。
答案 3 :(得分:0)
它是固定的,当添加对dll版本12.0.0的引用并将Target Framework更改为.Net Framework 4.5
时答案 4 :(得分:0)
当我在Dts.Variables [“ User :: xxxx] .Value();中引用传递的ssis变量时,收到此错误消息,其中xxxx不存在并且未从调用程序传递。 Console.Writeline引用不存在的传递变量。
答案 5 :(得分:0)
这只是一种不同的情况,并非最终目的是所有人的全部解决方案。
当我将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