I'm making a helper application that reformats some code files and creates new code files, which are to be added to my other project, so I could use the new code right away, but I'm having serious trouble adding that new code file into my project automatically. By the way it's in c# and the helper app is WinForms.
This question's only answer has two ways of doing that, but I couldn't make any of them work. With the first I can't find a Microsoft.Build
assembly to reference, and in the other there are clearly not enough arguments for a command line.
How do I programmatically include a file into a project without the use of third-party applications?
Basically, I'm looking for the equivalent of this:
...But done using code.
These are the features I suppose the solution should offer:
With user @psubsee2003's help I was able to find the Microsoft.Build.dll
file in C:\Windows\Microsoft.NET\Framework\v4.0.30319
folder on my computer and successfully import it by changing my project's target framework to version 4 Full profile, not the default Client profile.
And I found how to use the AddItem
method:
var p = new Microsoft.Build.Evaluation.Project(@"C:\projects\MyProject.csproj");
p.AddItem("Compile", @"C:\folder\file.cs");
p.Save();
The file will appear in project's root folder unless the project already had a folder called folder
, in which case the file will be placed there. So basically the file will be placed in the deepest folder chain found in the original file's path going towards the root folder.
It worked for my just adding the it to the ProjectFolder, and also add the folder programmatically like this.
var p = new Microsoft.Build.Evaluation.Project(@"C:\projects\BabDb\test\test.csproj");
p.AddItem("Folder", @"C:\projects\BabDb\test\test2");
p.AddItem("Compile", @"C:\projects\BabDb\test\test2\Class1.cs");
p.Save();