in codegen/src/Azure.Iot.Operations.ProtocolCompiler/T4/communication/dotnet/Project/code/DotNetProject.cs [122:197]
private bool UpdateSdkRef(XmlDocument xmlDoc, XmlElement itemGroupElt)
{
bool sdkRefUpdated = false;
bool sdkRefNeeded = true;
XmlElement? projectRefElt = (XmlElement?)xmlDoc.DocumentElement!.SelectSingleNode($"/{ProjectTag}/{ItemGroupTag}/{ProjectReferenceTag}[contains(@{IncludeAttr}, '{SdkProjectName}')]");
XmlElement? packageRefElt = (XmlElement?)xmlDoc.DocumentElement!.SelectSingleNode($"/{ProjectTag}/{ItemGroupTag}/{PackageReferenceTag}[@{IncludeAttr}='{SdkPackageName}']");
if (projectRefElt != null) // found a project reference
{
if (sdkProjPath == null) // but need a package reference
{
XmlNode itemGroupNode = projectRefElt.ParentNode!;
itemGroupNode.RemoveChild(projectRefElt);
if (!itemGroupNode.HasChildNodes)
{
itemGroupNode.ParentNode!.RemoveChild(itemGroupNode);
}
}
else // update project reference as needed
{
sdkRefNeeded = false;
if (projectRefElt.GetAttribute(IncludeAttr) != sdkProjPath)
{
projectRefElt.SetAttribute(IncludeAttr, sdkProjPath);
sdkRefUpdated = true;
}
}
}
if (packageRefElt != null) // found a package reference
{
if (sdkProjPath != null) // but need a project reference
{
XmlNode itemGroupNode = packageRefElt.ParentNode!;
itemGroupNode.RemoveChild(packageRefElt);
if (!itemGroupNode.HasChildNodes)
{
itemGroupNode.ParentNode!.RemoveChild(itemGroupNode);
}
}
else // update package reference as needed
{
sdkRefNeeded = false;
if (sdkVersion != null && (!packageRefElt.HasAttribute(VersionAttr) || packageRefElt.GetAttribute(VersionAttr) != sdkVersion))
{
packageRefElt.SetAttribute(VersionAttr, sdkVersion);
sdkRefUpdated = true;
}
}
}
if (sdkRefNeeded)
{
if (sdkProjPath != null)
{
XmlElement newRefElt = xmlDoc.CreateElement(ProjectReferenceTag);
newRefElt.SetAttribute(IncludeAttr, sdkProjPath);
itemGroupElt.AppendChild(newRefElt);
}
else
{
XmlElement newRefElt = xmlDoc.CreateElement(PackageReferenceTag);
newRefElt.SetAttribute(IncludeAttr, SdkPackageName);
if (sdkVersion != null)
{
newRefElt.SetAttribute(VersionAttr, sdkVersion);
}
itemGroupElt.AppendChild(newRefElt);
}
}
return sdkRefUpdated;
}