Had to move my directories for the local workspaces for Visual Studio. I updated the directory locations in VS, but it acted as if they were completely out of sync, and asked to get latest.
I let it do so for one project - it (re)downloaded everything, came up with a list of files to which I had local changes, listing them as conflicts. I kept the local version of all the files, so no work was lost. But when I opened the project, those files came up as not being in source control, and it offered to let me add them. So again, I have all my work, but that's a tedious process to re-connect everything. Not to mention that I'm not sure I caught ALL the files that needed re-adding.
I've also considered copying everything to other directories, download a clean copy of the project(s), doing a compare and folding in my changes. Still messy, but possibly safer.
Is there a far better way to do this practice that I've missed? Perhaps as a side question, is there an easy way to list all the files in a project not in source control?
Guess you moved/changed local TFS workspace folders in file system directly. This caused some folders/sub-folders/files lost mapping.
In other words, all of these folders already out of source control. That's why you need to re-add or re-connect them to TFS source control.
A right way please refer how to move an item in TFVC:
You can use Source Control Explorer to move one file or folder at a
time. You should not use Source Control Explorer to move folders or
files that are referenced by a Visual Studio project or solution. Move
these files with Solution Explorer instead and check in the move in a
new changeset.
In Source Control Explorer, select the item that you want to move,
open its shortcut menu, and choose Move.
In the Move dialog box, either manually type the destination for the
item in the To box, or choose Browse to use the Browse for Folder
dialog box.
Choose OK.
Move is actually a delete and re-add process. You could also take a look at this similar question here: Moving project (under source control) to different folder
In your situation, a quick way to solve the conflicts should be: First back up your local files, delete your old workspace, create a totally new workspace. Get latest version from sever side to your new workspace.
Then copy your back-up files/folders which copied from old workspace folder to the new one. Windows system will judge to replace files and add new files.(It may take some time) After this, TFS system will auto detect the changes in local and will list them as new pending changes. Some new add files maybe stay in the Excluded list, manually promote them in Included list.
Finally check in all your pending changes, everything should get back on track.
I have a Visual Studio Solution. Currently, it is an empty solution (=no projects) and I have added a few solution folders.
Solution Folders only seem to be "virtual folders", because they are not really created in the Filesystem and files inside solution folders are just sitting in the same folder as the .sln file.
Is there a setting that i've overlooked that tells Visual Studio to treat Solution Folders as "real" folders, that is to create them in the file system and move files into it when I move them inside the solution into one of those folders?
Edit: Thanks. Going to make a suggestion for VS2010 then :)
There is a workaround, that actually behaves as expected.
Add a New or Existing Web Site to the Solution. (I usually create a new one.)
Just make sure it's created inside your solution folder. (I sometimes even create a "link" to an external folder, e.g. 'Docs' or 'Marketing' on a network share. In that case it's ignored by Git of course.)
Make sure to go to the "Project" settings or Configuration Manager to exclude this "Web Site" from Build and Deploy!
Done. Now Solution Explorer will reflect any change in the file system and vice versa (including subfolders).
I (miss)use it for specs, docs, PM and some DevOps scripts that are shared within the team. It's easy to choose, what to include in source control or not, and (if set up correctly) it doesn't conflict with build.
I know the feature is not intended for that use case, but except for the maybe misleading "Project" icon I didn't find any shortages to that hack yet. And there still are use cases where the classical (virtual) Solution Folders that VS provides, fit in the picture. What do you think?
No special setting. I don't think it's supported.
You can create real folders in a "project" within the solution, but not in the solution itself.
In Visual Studio 2017, click on the "Solutions and Folders" icon in the Solution Explorer window. This button toggles from the virtual "solution" view into a "source view" that matches the layout of folders and files on the file system. When you add a new folder, the folder is physically created in the expected location.
.
The chosen answer suggests it would be possible to use actual projects instead of solution folders, but does not really explain how. I guess what I'm describing here is possibly the least awkward way of achieving that... :-P
The problem with regular project files is that they eventually will be compiled by MSBUILD. And if you want have a project which only contains non-compilable files, that will be an issue.
But some time ago Visual Studio introduced a new project type: Shared Project (.shproj extension). This project type does not get compiled by default, but only when (and only if) it is referenced by another project.
So one part of the trick here is to use shared projects instead of solution folders. It's obviously possible to add a shared project that is never referenced by any other project, meaning we can avoid the issue presented above.
Then, by using <None Include="**/*" /> clause in the .shproj file, we can make it automatically reflect any new files and/or subfolders.
So basically do this:
Create a new folder in your solution.
Add a new .shproj file at the root of this new folder.
Reference the new .shproj in your solution.
For instance, in my case, I've created a DockerDev.shproj, so I can group some docker-related scripts that we run only in our development machines:
<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="**/*" />
</ItemGroup>
</Project>
This .shproj file will keep track of any file, in any subfolder of this new DockerDev folder in my solution.
As far as I could see, this solution works pretty much like what the OP requested: it will work as a non-compilable reference to a folder, and it will automatically reflect any changes made to it.
Sara Ford contributed a Macro to add do this. In Visual Studio 2010, if you open your Macro Explorer, you will see a macro called "GenerateSlnFolderOnDirStructure." This will automate the creation of the Solution Folders and add the files.
Folder To Solution Folder By Cecilia Wirén - CeciliaSHARP
Remove the hassle of adding several files to solution folder. Just use the context menu for the solution and just below the option of creating a new solution folder you now find 'Add Folder as Solution Folder'. This will create a solution folder with the same name as you selected and add the items inside of that folder to the solution folder. This will not move the files on disk.
You can just sync your new solution folder nesting level and also name with the actual filesystem folder and it works like a charm!
Existing project :
Create the actual folder
Create the solution folder with the exact same name
Copy your project folder into the new folder (Actual file system)
(in solution explorer) - Righ-click on same folder
Add => Existing project
Add new project :
Create your solution folders
(Right-click on solution) => Add new project
Change the Location address under the project name you want to add, to the exact same address in your solution folders
No, it's not supported. As you suspected, solution folders are simply virtual subentries in the .sln file, nothing to do with the file system.
For C# in Visual Studio 2019 I used this way (Seems to be similar to this answer, but that didn't work at least in C# solutions)
In solution explorer click on switch views
Choose folder view
You can add individual folders to the solution
To get back to the regular view of solution explorer just click switch views again and choose the solution.
There seems to be a limitation using this way (comment from #montonero):
... just open a solution with multiple projects and try to move the projects to some other real folders through the folder view. The issue is VS doesn't update paths to projects in a solution file
Visual studio has no support for this. I made an extension that does something similar for VS2013 though. It maps solution folders to physical folders on your hard drive, though the mapping is one way (from hard drive to solution). That means a solution folder's contents will reflect the hard drive folder's contents, and not the other way.
With that out of the way, the extension may still be useful.
It has support for mapping solution folders to physical folders, filtering files and directories based on regex, and remembering mappings in your .sln file. Properties are non-intrusive so developers without the extension can still open the sln and not be affected.
Hosted on visual studio gallery:
https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd
Edit: Uploaded to bitbucket. Now open source. MIT license. https://bitbucket.org/LSS_NorthWind/physical-solution-folders
Create "Solution folder". This will create logical folder, but not physical one.
Right click to the solution folder and open a new project dialog. But before you click OK, you have to change a project location to your desired physical folder and VS will create it and place the project inside.
Create an empty solution then
open .sln file in an editor
and put these lines of code after MinimumVisualStudioVersion
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"
open the solution in vs and you should add the same folder to it
now you can see the folder and add a project to it
you have a real folder in windows and a virtual one in vs
be sure that you
created the projects with that path
You can add real folders by choosing "Add new filter" for a Visual Studio project file. You can also do "Add new filter" under an existing folder. Once the folder is created, rename it and add source or header file or whichever suits your project. This is one way I know which lets us create real folders through the Visual Studio IDE.
I've wanted this feature a few times myself, but at the end of the day, you really do NOT want the ability to do this. Think of your Solution (file) as as the root of a web application and think of Solution folders as Virtual Directories (literally and functionally). The contents of a web virtual directory could be physically on a different server altogether. Where Visual Studio muddled up the solution folders concept is by allowing you to create new files inside the folder. You should always "Add Existing" when adding content. When you add existing, it creates a link to the source location of the file.
But as for the reason you do not want solution folders to behave like "physical" folders is because your solution layout may not necessarily use the same convention as your source control layout. Solution folders allow you to customize the hierarchy of your projects so that you can group projects and items together any way you like, and then decide you don't like it and change it again without having to go through the nightmare of moving source control items around and irritating the rest of your team.
Note: Yes this is possible you can create a folder on root but its lil bit tricky....
By giving some extra efforts you can do it How?
Lets follow the step--
1-Create Folder eg: "newfolder" on root (where your .sln file reside).
2.Copy and paste your projects inside the folder.
3.go to your sln file and find moved projects and append newfolder\ in moved project's address.
4.Save sln file.
5.Open your project and Commit the repository in git or so...
6.Take the repository on fresh location.
YOU are done...
if still you are not able to see your folder -----
1.Add a solution folder xyz.
2.Open sln file and change that folder name with your folder name.
Congrats you are done..
If you face any problem just write me for help..
The folder created underneath the solution will be virtual as said. Maybe this might be called a workaround but you can physically create the folder on disk either before or when you add new item/project and Robert should be a sibling of your dad.
ps- on closer look maybe i should explain "bob's your uncle" means your fine/sorted.
I have a bit of a workaround for this (it's not great, but it works).
Create a folder in your solution (i.e. "Contoso")
Right click on the solution and then click "Open Folder in Solution Explorer"
Create the physical folder (i.e. "Contoso") in the solution directory
Copy/Create files in the physical folder.
Drag the files into the virtual folder in the solution explorer.
It's not great because you will need to manually maintain the file references, but it works for me.
Yes, it is possible in Visual Studio 2019 for the project
Though this is an old topic, I will add my answer, because I had the same issue and searched for a solution but it seemed that everyone is 100% sure that there is no way to do it. So I started to experiment with VS 2019, tried a lot of settings, and eventually figured the way out.
1 Button :D
You only need to click 1 button - Show All Files, and you will see the physical structure of your Visual Studio Solution:
Now you can add files and folders to the project and they will be added to the file system (physically)
Right-click on your project → Add → New Folder
Note that the option changed from New Filter to New Folder
My recommendation for C++
Create a root folder inside your project's directory which will contain all the application related stuff (code, headers, data, libs... ). I name it Project
Add subfolders as you'd like to structure your code. I prefer the following layout: include, src, data, libs, etc
Now setup Visual Studio to recognize these folders as headers and sources directories.
Click on your project in the Solution Explorer. Note, in my case, it is CrazyDemo, not the Solution 'CreazyDemo' (1 of 1 project)
Go to the project properties menu: Project→Properties
Open Configuration Properties→VC++ Directories tab
Edit Include Directories and set to $(ProjectDir)/Project/include;$(IncludePath)
Edit Library Directories and set to $(ProjectDir)/Project/libs;$(LibraryPath)
Edit Source Directories and set to $(ProjectDir)/Project/src;$(SourcePath)
You may use the Scope to This option if you want to focus on 1 project. Just right-click on the Project folder and press Scope to This
Note that after this action, in order to open Project Properties you need to click on any of your project files (like main.cpp in the example) and then click on the editable client area (like when you want to change the code) and only after that you'll be able to see the Project→CrazyDemo Properties option. [Visual Studio is Insane 🤦♂️]
Finally, you may have a project like this
I moved some code from my c drive to my d drive. When I opened the solution, it told me that:
The solution appears to be under source control, but its binding
information cannot be found. Because it is not possible to recover
this missing information automatically, the projects whose bindings
are missing will be treated as not under source control.
So I tried permanently removing the bindings and downloaded the latest version. Now my changes don't register as pending changes.
I've tried selecting the solution in the Solution Explorer and File => Source Control => Change Source control, but it does not let me bind. Server Name and Server Binding columns have "".
Generally speaking, the location of code on your machine is dependent upon where your workspace is located.
If you move your workspace to the D: drive, then there shouldn't be an issue.
However, if you simply used Explorer to copy the files to the new location, then VS isn't going to be able to maintain the bindings.
From the Workspace Editor you can map the entire tree, solutions or even individual projects to a new location.
First off, put it back and undo the changes.
Then, Go to File | Source Control | Workspaces.
Click on the work space name and then the "Edit..." button.
In the working folders area select the source control folder you want to move and give it a new local folder location.
You will need to edit your Workspaces for TFS Server to know the change that has happened at your local machine. To edit your workspace, in Visual Studio:
ensure you have no pending changes; also copy your source code folder to some location temporarily, just to be safe (you can remove after you are all set)
go to Source Control Explorer
locate the "Workspace:" dropdown
select the item "Workspaces" from the dropdown list (you will get a dialog titled "Manage Workspaces"
if you have multiple Workspaces, select the appropriate one from the list in the dialog
click on "Edit" button (you will get an "Edit Workspace..." dialog)
down below in the dialog, you will see "Working folders" grid
click on appropriate row from the grid and modify the "Local folder" path to set to your new folder location
Sometimes TFS and Visual Studio have issues in getting these workspace changes synchronized. I would always close Visual Studio and re-launch it to get my changes synchronized anytime after I make Workspace related changes.
Hope this helps.
the most crude way here (I don't know if there is any other way)
is to put the folder back to its old location , Check in your changes
then remap the project to the new folder
When you move files/folders to make the moves pending changes you need to use a TFS client to do the moves.
For one or two files the Team Explorer UI is OK, for more the command line is easiest.
See tf.exe rename on MSDN (tf move is an alias for rename). There is also step by step help on using the GUI: Move, Rename, and Delete Version-Controlled Files and Folders.
Why do some of my files in visual studio get created like this:
http://i.minus.com/jQi1qFTagyRVD.png
And why does it prevent me from moving them around? How am I supposed to work with a folder hierarchy in visual studio 2010 without this happening?
The main problem with this is that I cannot move files between folders using the solution explorer once I've added them. In order to move them I have to remove them, then drag them to a different folder, then add them again, this seems silly. See image:
http://i.minus.com/jlhGNHjyvpGOO.png
Folder structure of VS solution does not have to map one-to-one to file locations. You can add files "as link" (small triangle on Add button when you adding existing item) to a folder in VS solution. Such files will not be copied to the disk folder you are adding to, but rather have "link" pointing to original location (using relative path). I'd recommend opening the solution file in text editor to see how different files are referenced.
I.e. this feature is useful when you want to share sources between different projects.
I'm not sure about "move them around" part...
At the moment when unmapping a source on TFS Source Control in Visual Studio 2010, the local downloaded files are removed automatically.
How can I keep them untouched?
Nam.
In VS2012
"You can remove the mapping in the Manage Workspaces dialog (File -> Source Control -> Advanced -> Workspaces...) Pick your workspace and select edit, remove the entry for that mapping. Then hit OK. When prompted to perform a Get you can say "no" and the items will stay on your local disk until you next perform a Get."
I added some more information on to it.
Source: Remove Mapping
Just in case anyone else need help with this because i went for hours searching for the solution....and this is the way to see all the mappings you have and remove them if wanted without deleting local files.
I have not seen this behavior. When un-mapping, are you choosing to re-download all files in the workspace? If so, choose not to do that, and the files should be preserved locally. Keep in mind that TFS is no longer tracking changes at that point, so it could get you into a lot of difficulty if you inadvertently make changes to those files.
What kind of process are you trying to implement that you need to keep these files around after an unmap? Maybe there's a different way to accomplish what you need?
--EDIT--
When you're doing this, files are just files, so you could:
do a Get of all files in that workspace
copy them to another folder on your hard drive
map that new folder
Do an "add files" on everything in the new folder structure
check in.
You will have to rebind all of the projects/solutions to source control when you do this.