2016-02-02 64 views
0

在MSBuild項目中運行Nunit控制檯命令是爲了執行測試而構建的,該命令包含大約90個路徑,每個命令都是編譯的測試項目(.test.dll)的完整路徑,並且包含至少100個字符但不超過150Nunit有一個路徑長度限制?

當腳本運行我得到了以下錯誤:

NUnit version 2.5.10.11092 
Copyright (C) 2002-2009 Charlie Poole. 
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. 
Copyright (C) 2000-2002 Philip Craig. 
All Rights Reserved. 

Runtime Environment - 
    OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 
    CLR Version: 2.0.50727.5485 (Net 2.0) 

ProcessModel: Default DomainUsage: Multiple 
Execution Runtime: Default 
Unhandled Exception: 


System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Builds\123\XXXX\XXX.Build.Sonar\srcDroplocation\Build\x86\Release\xxxxx.xxxx.CustomTypes.Test.dll'. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights 
, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolea 
n bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) 
    at NUnit.Core.AssemblyReader.CalcHeaderOffsets() 
    at NUnit.Core.AssemblyReader..ctor(String assemblyPath) 
    at NUnit.Util.RuntimeFrameworkSelector.SelectRuntimeFramework(TestPackage package) 
    at NUnit.Util.DefaultTestRunnerFactory.GetTargetProcessModel(TestPackage package) 
    at NUnit.Util.DefaultTestRunnerFactory.MakeTestRunner(TestPackage package) 
    at NUnit.ConsoleRunner.ConsoleUi.Execute(ConsoleOptions options) 
    at NUnit.ConsoleRunner.Runner.Main(String[] args) 

這個文件的原始路徑爲「C:\構建\ 123 \ XXXX \ XXX.Build.Sonar \ SRC \ Droplocation \建立\ 86 \發佈\ xxxxx.xxxx.CustomTypes.Test.dll」。該文件存在,我注意到,在例外src和Droplocation之間的路徑中缺少一個反斜槓。

這個問題發生在我的生成服務器上,在我的本地機器上工作,不同的是在我的本地機器上這個文件夾並沒有那麼深:'C:\ T \ XXX \ Droplocation \ Build \ x86 \ Release \ xxxxx .xxxx.CustomTypes.Test.dll'

對使用​​NUnit的路徑有任何限制嗎?

我也嘗試才能把它的所有引用創建一個.nunit文件,但它會導致另一個問題

+0

更新:我更改配置爲調試,和東西š同樣的事情發生了,但是路徑不同,現在,例外中缺失的字符不是反斜槓,而是一個字母。它無法找到該文件。是的,我檢查了將它發送給命令的原始路徑,它是正確的。 – XtianGIS

+0

路徑上有多少個字符是丟失的字符?我很好奇每次同一地點是否被丟棄。在構建腳本中是否有任何字符串替換命令? – Pedro

+0

對於調試的情況是87個字符,當設置爲釋放時是40個字符。 但是,如果我從NUnit控制檯的參數開頭算起已刪除字符的位置,它們都出現在第8005位置 – XtianGIS

回答

0

確實這是NUnit版本2.5.10.11092中的錯誤。

  1. 創建的驅動單元指向C:\構建\ 123 \ XXXX \ XXX.Build.Sonar \ SRC \ Droplocation

subst t: C:\Builds\123\XXXX\XXX.Build.Sonar\src\Droplocation

  • 變化的$(OUTDIR)從C:\構建\ 123 \ XXXX \ XXX.Build.Sonar \ SRC \ Droplocation噸:
  • 0

    在路中間的缺失斜線是由生成腳本,不造成的NUnit 。我的猜測是構建腳本將兩個字符串附加在一起,兩者都沒有必要的斜槓。如果相同的構建腳本在您的盒子上工作,那麼它可能是服務器上的全局變量,而您的機器上的變量沒有開始/結束斜槓。

    編輯:根據上面的評論,您可能會遇到Windows限制。根據this support page,命令提示符限制爲8191個字符。這個限制是在任何環境變量被擴展之後。您可能需要減少參數的數量或將生成服務器編譯爲較短的路徑。

    +0

    對不起,但缺少的斜槓只出現在異常的消息中。 Msbuild腳本中的錯誤是我第一次猜測,但是我檢查並仔細檢查,但是從MSBuild提供的路徑是正確的,事實上Msbuild腳本不會附加兩個字符串。 – XtianGIS

    +0

    msbuild從哪裏獲取該路徑?一定有什麼東西創造它...... – Pedro

    +0

    的$(OUTDIR)設置只是一個時間的完整路徑,因此它不會附加字符串。此外,我打印命令並逐一檢查路徑,它們都是正常的,觸發異常的不是第一個。 – XtianGIS