public override void Write(XmlWriter writer, Project project, IMSBuildProjectGeneratorContext context)
{
writer.WriteStartElement("ItemGroup");
foreach (var refPath in context.References.Where(IsValidReference))
{
if (IsSolutionReference(refPath))
{
var moduleAndprojectName = ((string) refPath).Substring(4);
var parts = moduleAndprojectName.Split('#');
var moduleName = parts[0];
var projectName = parts[1];
var referredProject = Suite.GetModule(moduleName).GetProjectOrTestProject(projectName);
if (referredProject.Type == ProjectType.Library ||
referredProject.Type == ProjectType.Executable)
{
writer.WriteComment("Project reference " + projectGuidManagement.GetGuid(referredProject));
var projectPath = pathManagement.GetProjectFile(referredProject);
if (projectPath != null)
{
writer.WriteStartElement("ProjectReference");
writer.WriteAttributeString("Include",
Suite.SuiteRoot.GetRelativePathFrom(
project.RootDirectory.GetChildDirectory(
project.RootDirectory.ChildDirectories.First()), projectPath));
writer.WriteElementString("Project", projectGuidManagement.GetGuid(referredProject).ToString("B"));
writer.WriteElementString("Name", referredProject.Name);
writer.WriteEndElement();
}
else
{
writer.WriteStartElement("Reference");
writer.WriteAttributeString("Include", projectName);
writer.WriteElementString("HintPath",
ToProjectRelativePath(project,
Path.Combine(Suite.SuiteRoot.GetRelativePath(targetDir), referredProject.Module.Name,
referredProject.Name + ".dll"), sourceSetName));
writer.WriteElementString("SpecificVersion", "False");
writer.WriteEndElement();
}
}
}
else
{
writer.WriteStartElement("Reference");
if (IsGACReference(refPath))
{
var assemblyName = ((string) refPath).Substring(4);
writer.WriteAttributeString("Include", assemblyName);
}
else
{
string relativePath = ToProjectRelativePath(project, Path.Combine("target", refPath), sourceSetName);
writer.WriteAttributeString("Include", Path.GetFileNameWithoutExtension(relativePath));
writer.WriteElementString("HintPath", relativePath);
writer.WriteElementString("SpecificVersion", "False");
writer.WriteElementString("Private", "True");
}
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}