CruiseControl.net, SVN, website y dependencies

Tengo un website de Asp.Net (no hay un file .csproj).

El código fuente de este website está controlado por SVN.

Excluí la carpeta bin del control de origen.

Todos los ensamblados externos están referencedos desde la carpeta DLL que está en la raíz de mi SVN.

Intento implementar este website con cruisecontrol.net.

El problema :

El control de crucero carga todos los files de subversión, ejecuta msbuild.exe contra el file .sln. Esto produce un error: no puede encontrar los ensamblados externos (porque la carpeta bin está excluida).

La solución que encontré hasta ahora:

Antes de mi tarea de msbuild, haz una robocopy de la dll desde mi control de origen a la carpeta / bin.

Hay alguna otra solucion ? (No quiero editar mi configuration cada vez que agrego un ensamblaje externo a mi proyecto).

EDITAR:

Finalmente usé la técnica de "actualizar file" aquí está el progtwig que utilicé para crearlos

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); } } } } 

Supongo que tiene files .dll que son de terceros, en lugar de los creados por proyectos de biblioteca de classs que podría include en su solución y agregar como reference de proyecto. Tenemos un escenario similar con elementos como la biblioteca Microsoft Anti-Xss y otros .dlls de terceros comunes a los que hacemos reference en casi todas nuestras aplicaciones web.

En lugar de excluir el directory \ bin, excluya * .dll. De esta forma, cuando agrega una reference al .dll, Visual Studio agregará .dll al directory \ bin Y un file .dll.refresh al directory \ bin.

El file .Refresh le dice a Visual Studio de dónde tomar el file .dll. Siempre que el .dll original se encuentre en esa location, entonces debería poder build en el server de compilation O en la PC de un nuevo desarrollador.

Por ejemplo, tenemos un directory \ shanetworking \ commonDlls en control de fuente, donde los .dlls se registran en el control de fuente.

Todas nuestras otras aplicaciones hacen reference a estos cuando sea necesario. Siempre que estos estén registrados, cuando el server de compilation construya su proyecto, sabrá ir al directory \ shanetworking \ commonDlls para copyr ese file DLL.

Esto nos permite tener una fuente maestra para los files .dll para que no tengamos que copyrla en unas pocas docenas de aplicaciones web diferentes cuando llega el momento de actualizar. Lo colocamos en nuestro directory compartido \ commonDlls (sobrescribiendo el original), lo registramos y todas nuestras aplicaciones web están utilizando la última versión.

edit – added – enlaces a respuestas sobre temas relacionados que tienen relación con esta respuesta:

SVN y binarys

¿Cómo administrar las references en SVN / Visual Studio?

Buenas prácticas: entorno queueborativo, directory Bin, SVN

Editar – agregado – sección de nuestro file ccnet.config que apunta a un file .sln

Esto probablemente no es necesario, pero desde que mencioné el borrado del file .sln en mi comentario a continuación, pensé que lo agregaría.

 <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>