There is actually a (subtle) difference between the two. Imagine you have the following code in File1.cs:
// File1.cs
using System;
namespace Outer.Inner
{
class Foo
{
static void Bar()
{
double d = Math.PI;
}
}
}
Now imagine that someone adds another file (File2.cs) to the project that looks like this:
// File2.cs
namespace Outer
{
class Math
{
}
}
The compiler searches Outer
before looking at those using
directives outside the namespace, so it finds Outer.Math
instead of System.Math
. Unfortunately (or perhaps fortunately?), Outer.Math
has no PI
member, so File1 is now broken.
This changes if you put the using
inside your namespace declaration, as follows:
// File1b.cs
namespace Outer.Inner
{
using System;
class Foo
{
static void Bar()
{
double d = Math.PI;
}
}
}
Now the compiler searches System
before searching Outer
, finds System.Math
, and all is well.
Some would argue that Math
might be a bad name for a user-defined class, since there's already one in System
; the point here is just that there is a difference, and it affects the maintainability of your code.
It's also interesting to note what happens if Foo
is in namespace Outer
, rather than Outer.Inner
. In that case, adding Outer.Math
in File2 breaks File1 regardless of where the using
goes. This implies that the compiler searches the innermost enclosing namespace before it looks at any using
directive.
I had challenges in understanding the documentation for installing and configuring CruiseControl.Net with StarTeam as the souce control in a Vista system running IIS 7. Finally I have successfully set up cruise control to work. I am listing the steps to get it working.
Step 1:Grab a copy of CruiseControl.Net from here. Run the setup. As a part of the install, the setup installs the ccnet server and a webdashboard.
Step 2:Once installed, to get the webdashboard up and running, fire your browser and type. http://localhost/ccnet (this is the default virtual directory on install. This points to the $InstallFolder/webdashboard folder in your build server. If the system is running IIS5 or 6, then you will see a CruiseControl.Net page, in IIS7, an 500 error is thrown. To resolve this issue, proceed to Step 3, if no issue was encountered, proceed to Step 4.
Step 3:Run the followin command as an administrator. Note: Here ccnet is the virtual directory which points to the physical location of webdashboard in the system.
%SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/ccnet"
Once the command is run, then just restart iis and browse to http://localhost/ccnet. It should show the CruiseControl.Net dashboard.
Step 4:Next step is to configure the ccnet server. Open the ccnet.config file located in the ’server’ folder of the install directory to edit.
Project Section:
Define the project section. The project name can be any identifier not necessarily your project name. This will be used by CruiseControl.Net to recognize your project.
Source Control Section
In my case, the source control was StarTeam. Various properties like login credentials, project etc, are to be set.
Executable:Path to the ’stcmd.exe’ the Star Team command line utility.
Project:The name of the Project as defined in Star Team, that has to be extracted.
UserName, Password, Host, Port:Star Team Server connection setttings.
Path:Path from which files have to extracted from StarTeam. Example: Consider the Project root folder in StarTeam is “Test”. Let the project and solution files lie in the hierarchy “Test\TestProject\MyProject”. To pull the project files and solution from this location, specify “Test” for project and “TestProject\MyProject” for path.
Override Folder Working Directory:Path to which the files from Star Team are to be checked out for the build. If not specified, the original working folder specified in the StarTeam will be used to extract the files.
Auto Get Source:Specifying this to ‘true’ will allow CruiseControl.Net to automatically check out files from StarTeam
fileHistoryRegEx:I had to make a change to the Date regular expression, as my regional settings was configured to English(India), wherein DateTime is specified as DD-MM-YYYY HH:MI:SS (IST). I had to change this, since I got a Format invalid:System.DateTime exception during the run.
TimeOut:Specify the timeout for StarTeam polling.
Following is the complete listing of the starteam configuration block.
StarTeam
StarTeam
MSBuild section
I used MsBuild for the build task. Following section explains the properties involved to get the MsBuild setup for CruiseControl.Net.
Executable:Path to the ‘MsBuild.exe’ file in the system.
Working Directory:Location of the files to be built. i.e., Location to where the StarTeam extracted the files that need to be built.
Project File:The .proj file or the .sln file that needs to be built.
Build Args:Specifies additional arguments passed to the msbuild.exe.
Targets:Actions to be done. Here I wanted Clean’ and then ‘Build’ done on the Solution.
Timeout:Time after which error message will be displayed if there happens to be a failure to invoke the build.
Logger:Location of the logger assembly that will be used to produce the build result.
Following is the complete listing of the msbuild configuration block.
MS Build
MS Build
Triggers Section
Triggers section specifies the time and condition when the build of the project had to be invoked. During intital setup for testing, set the buildCondition to “ForceBuild” (forces a build), and once the testing is done, change it to “IfModificationExists”(does a build only when a modification is detected).
Following is the complete listing of the Triggers configuration block.
Triggers
Triggers
Step 5:Run the ccnet.exe application located in the ’server’ folder of the CruiseControl.Net install location. The code will be pulled from the StarTeam to the location specified and the build should proceed. The results of the build are stored in the $InstallFolder\ProjectName\Artifacts\ms-build.xml file.
Hope this helps.
Best Answer
Cruise Control will happily compile using MS Build (
.proj
) files, with which you can build a fairly complete build script.Also, don't forget that your
.csproj
files follow the.proj
file format, so at the very basic level you can just point Cruise Control at your.csproj
files and be done.p.s. I wouldn't dream of abusing VSS... it's beneath me. You're stuck with what you're stuck with, and I understand how that goes. But you should push for something better if you get the chance. I prefer subversion, personally.