2011-09-05 77 views
2

我有以下代碼從Subversion使用SharpSVN獲取已更改文件的列表。來自MSBuild的SharpSVN錯誤

該代碼在單元測試中工作得很好,但從MSBuild運行時失敗。單元測試和MSBuild都使用相同的參數運行(我已通過調試兩者進行檢查),並在同一用戶下運行。錯誤異常在GetLog內部引發,(GetInfo成功,其他SVN方法在其他地方工作)。

任何想法?

代碼:

public IEnumerable<string> GetChangedFiles(long revisionNumber) 
{ 
    using (var client = new SvnClient()) 
    { 
     SvnInfoEventArgs info; 
     client.GetInfo(_workingCopyPath, out info); 
     var lastRevision = info.LastChangeRevision; 

     Collection<SvnLogEventArgs> logItems; 
     var args = new SvnLogArgs(); 
     args.RetrieveChangedPaths = true; 
     if (revisionNumber > lastRevision) 
     { 
      throw new ArgumentException(string.Format(
       "Revision number ({0}) is greater than last revision ({1})", 
       revisionNumber, lastRevision)); 
     } 

     args.Range = new SvnRevisionRange(revisionNumber, lastRevision); 
     client.GetLog(_workingCopyPath, args, out logItems); 
     return logItems.SelectMany(li => li.ChangedPaths).Select(cp => cp.Path); 
    } 
} 

和異常:

System.Runtime.InteropServices.SEHException was unhandled by user code 
    Message=External component has thrown an exception. 
    Source=SharpSvn 
    ErrorCode=-2147467259 
    StackTrace: 
     at svn_client_log5(apr_array_header_t* , svn_opt_revision_t* , apr_array_header_t* , Int32 , Int32 , Int32 , Int32 , apr_array_header_t* , IntPtr , Void* , svn_client_ctx_t* , apr_pool_t*) 
     at SharpSvn.SvnClient.InternalLog(ICollection`1 targets, Uri logRoot, SvnRevision altPegRev, SvnLogArgs args, EventHandler`1 logHandler) 
     at SharpSvn.SvnClient.Log(String targetPath, SvnLogArgs args, EventHandler`1 logHandler) 
     at SharpSvn.SvnClient.GetLog(String targetPath, SvnLogArgs args, Collection`1& logItems) 
     at MSBuild.CustomTasks.SVN.Svn.GetChangedFiles(Int64 revisionNumber) 
     at MSBuild.CustomTasks.SVN.SvnCopy.Execute() 
     at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
     at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult) 
    InnerException: 

回答

3

我找到了解決辦法,這是相當具體到我的情況,雖然。

當我部署我的CustomTask時,我忘記了部署SharpSvn-SASL21-23-Win32.dll(從單元測試運行時它在那裏)。