In a Visual Studio (2008) project, we have two web applications that should share some aspx pages and ascx controls.
I found this tutorial Creating and Using User Control Libraries, which works in principal, but has left TFS integration out of the solution.
You start with two (or more) applications which have common elements. First create another Web Application Project and create a new folder named “shared” (or “common” or whatever your preferred name is).
The directory hierarchy under “shared” in the common project should be the same as expected by the referencing projects.
Now move the common files into this folder. Make sure you rename the namespace declarations in the moved files to the new web application’s namespace. Check the files in TFS.
Delete the copies of the common files from the referencing projects. After updating from TFS (Get Latest Version), make sure the files are really deleted in the file system. (I had several occurrences where deletions were not executing in the directories)
In the referencing projects, add as Pre-build event command line the following lines:
xcopy /s /y "$(SolutionDir)shared\*.ascx" "$(ProjectDir)" xcopy /s /y "$(SolutionDir)shared\*.aspx" "$(ProjectDir)"
Adjust the path after $(SolutionDir) to match the path to the common project. You may also use $(ProjectDir) as base source path, and ..\ for parent directories.
Save the project, check in all pending changes, and build, which will execute the pre-build events, but will (most likely) fail, since you are still missing some files.
Next, use Project, Show All Files to display files in the Solution Explorer which are not part of the project.
Find the xcopied files, right-click each file individually and select Include in Project. This will add the ascx and aspx files in the project, and mark them Added in TFS.
Since we already have the files in TFS in the common project, and simply copy them into the referencing projects during build, we don’t want them in TFS in the referencing projects.
Select the added files in the Pending Changes window (i.e. all files except for the project file), right-click and execute Undo. Thus the files will not end up in TFS.
Check in the project file, and build.