2011-08-03 55 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文件 –