2011-08-03 57 views
0

我有一個Asp.Net網站(沒有.csproj文件)。CruiseControl.net,SVN,網站和依賴關係

本網站的源代碼由SVN控制。

我從源代碼管理中排除了bin文件夾。

所有外部程序集都是從SVN根目錄下的DLL文件夾引用的。

我嘗試通過cruisecontrol.net部署此網站。

問題:

巡航控制系統負載均來自顛覆文件,它msbuild.exe違背了.sln文件。這會導致一個錯誤:找不到外部程序集(因爲bin文件夾被排除)。

我迄今發現的解決方案:

我的MSBuild任務之前,請DLL的ROBOCOPY從我的源代碼控制到/ bin文件夾。

有沒有其他解決方案? (我不想每次將外部程序集添加到我的項目時編輯我的配置)。

編輯:

我終於在這裏使用的「刷新文件」技術是我用來創建他們

class Program 
{ 
    private const string PATH_BIN = @"F:\WebSite\bin\"; 
    private const string PATH_REFERENCE = @"C:\DLL\"; 

    static void Main(string[] args) 
    { 
     foreach (string aFile in Directory.GetFiles(PATH_BIN)) 
     { 
      if(!aFile.EndsWith(".dll")) 
       continue; 
      string pathRefreshFile = aFile + ".refresh"; 
      if(File.Exists(pathRefreshFile)) 
       continue; 
      string referenceFilePath = PATH_REFERENCE+Path.GetFileName(aFile); 
      if (!File.Exists(referenceFilePath)) 
       continue; 
      using (StreamWriter sw = new StreamWriter(pathRefreshFile)) 
      { 
       sw.Write(referenceFilePath); 
      } 
     } 
    } 
} 

回答

1

我假設你有一個是第三方.dll文件的程序,而不是由類庫項目創建的項目,您可以將其添加到解決方案中並添加爲項目參考。我們在類似Microsoft Anti-Xss庫和其他常見的第三方.dll這樣的項目中也有類似的情況,我們在幾乎所有的Web應用程序中都參考了這些。

不排除\ bin目錄,排除* .dll。這樣,當您添加對.dll的引用時,Visual Studio會將.dll添加到\ bin目錄並將一個.dll.refresh文件添加到\ bin目錄。

That.Refresh文件告訴Visual Studio在哪裏抓取.dll文件。只要原始的.dll位於該位置,那麼您應該能夠在構建服務器上構建,或者在一個全新的開發人員的PC上構建。

例如,我們在源代碼控制中有一個\ shared \ commonDlls目錄,其中將.dlls簽入源代碼管理。

我們所有的其他應用程序在需要時會引用這些參數。只要這些簽入,當構建服務器建立你的項目,它會知道去他\共享\ commonDlls目錄複製該DLL。

這使我們能夠有一個主要來源的.dll文件,以便我們無需在升級時將其複製到幾十個不同的Web應用程序中。我們把它放到我們共享的\ commonDlls目錄中(覆蓋原文),並將其簽入,並且我們所有的網絡應用程序現在都使用最新版本。

編輯 - 添加 - 鏈接到對這個答案軸承相關主題的答案:

SVN and binaries

How manage references in SVN/Visual Studio?

Best Practice: Collaborative Environment, Bin Directory, SVN

編輯 - 添加 - 從我們的CCNET部分。配置文件指向.sln文件

這可能是不需要的,但是因爲我在下面的評論中提到了.sln文件,所以我想添加它。

<msbuild> 
     <description>DonationRequests</description> 
     <workingDirectory>D:\dev\svn\trunk\Intranet\DonationRequests</workingDirectory> 
     <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> 
     <projectFile>DonationRequests.sln</projectFile> 
     <buildArgs>/p:Configuration=Debug /v:diag</buildArgs> 
     <timeout>900</timeout> 
     <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger> 
</msbuild> 
+0

這裏的問題是,我是從的MSBuild建設,所以.refresh文件,不使用 –

+0

我們從MSBuild的建設,以及,他們在我們的系統中使用。你是否將msbuild指向.sln文件?其實,除非我誤解了,甚至Visual Studio的「使用msbuild」,不是嗎? – David

+0

是的我是,我會嘗試.refresh文件 –