Background
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.
Failed attempts
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.
Question
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.
Requirements
These are the features I suppose the solution should offer:
- Select the solution which has the project we're adding the file to
- Select project into which the file is to be added
- Select directory within the project
- And, of course, the file which we're adding
Progress
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.
Microsoft Build.Evaluation
namespace is available in .NET 4.0 and up. What are you building to?Microsoft.Build
my Visual Studio 2010 Ultimate saysThe type or namespace name 'Build' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
. When I look in the "add reference" list, there is no such entry asMicrosoft.Build
anywhere to be found.Microsoft.Build
dlls, all of them had a yellow warning sign icon and the error list containedCould not resolve assembly "Microsoft.Build". The assembly is not in the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client"
for all of them.AddItem
method.