153 lines
5.0 KiB
C#
Raw Normal View History

using System;
using System.Xml.Linq;
namespace ProjectConverter.Platforms
{
public class MetroConverter : Converter
{
private bool isCurrentProjectExecutable;
public override string Postfix
{
get
{
return "WindowsMetro";
}
}
#region ConvertImport
protected override void ConvertImport(XElement element, XAttribute projectAttribute)
{
if (projectAttribute != null)
{
if (projectAttribute.Value.EndsWith("Microsoft.CSharp.targets"))
{
projectAttribute.Value =
@"$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\" +
@"v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets";
}
else if (projectAttribute.Value.EndsWith(XnaGameStudioTarget) ||
projectAttribute.Value.EndsWith(XnaPipelineExtensionTarget))
{
element.Remove();
}
}
}
#endregion
#region ConvertMainPropertyGroup
protected override void ConvertMainPropertyGroup(XElement element)
{
ChangeOrCreateNodeValue(element, "ProjectTypeGuids",
"{BC8A1FFA-BEE3-4634-8014-F334798102B3};" +
"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}");
//ChangeOrCreateNodeValue(element, "TargetFrameworkVersion", "4.5");
//ChangeOrCreateNodeValue(element, "TargetPlatformVersion", "8.0");
DeleteNodeIfExists(element, "TargetFrameworkVersion");
DeleteNodeIfExists(element, "TargetPlatformVersion");
DeleteNodeIfExists(element, "TargetFrameworkProfile");
DeleteNodeIfExists(element, "XnaFrameworkVersion");
DeleteNodeIfExists(element, "XnaPlatform");
DeleteNodeIfExists(element, "XnaProfile");
DeleteNodeIfExists(element, "XnaCrossPlatformGroupID");
DeleteNodeIfExists(element, "XnaOutputType");
DeleteNodeIfExists(element, "ApplicationIcon");
DeleteNodeIfExists(element, "Thumbnail");
DeleteNodeIfExists(element, "PublishUrl");
DeleteNodeIfExists(element, "Install");
DeleteNodeIfExists(element, "UpdateEnabled");
DeleteNodeIfExists(element, "UpdateMode");
DeleteNodeIfExists(element, "UpdateInterval");
DeleteNodeIfExists(element, "UpdateIntervalUnits");
DeleteNodeIfExists(element, "UpdatePeriodically");
DeleteNodeIfExists(element, "UpdateRequired");
DeleteNodeIfExists(element, "MapFileExtensions");
DeleteNodeIfExists(element, "ApplicationRevision");
DeleteNodeIfExists(element, "ApplicationVersion");
DeleteNodeIfExists(element, "IsWebBootstrapper");
DeleteNodeIfExists(element, "UseApplicationTrust");
DeleteNodeIfExists(element, "BootstrapperEnabled");
XElement outputTypeNode = GetOrCreateNode(element, "OutputType");
string outputTypeValue = outputTypeNode.Value.ToLower();
isCurrentProjectExecutable =
outputTypeValue == "winexe" ||
outputTypeValue == "appcontainerexe" ||
outputTypeValue == "exe";
if (isCurrentProjectExecutable)
{
outputTypeNode.Value = "AppContainerExe";
}
}
#endregion
#region ConvertItemGroup
protected override void ConvertItemGroup(XElement element)
{
XName bootstrapperPackageName = XName.Get("BootstrapperPackage",
element.Name.NamespaceName);
var bootstrappers = element.Elements(bootstrapperPackageName);
foreach (XElement bootstrapper in bootstrappers)
{
bootstrapper.Remove();
}
}
#endregion
#region ConvertPropertyGroup
protected override void ConvertPropertyGroup(XElement element)
{
DeleteNodeIfExists(element, "NoStdLib");
DeleteNodeIfExists(element, "XnaCompressContent");
}
#endregion
#region Convert
protected override void PostConvert()
{
string namespaceName = currentProject.Root.Name.NamespaceName;
AddMetroVersionNode(namespaceName);
AddAppManifestNode(namespaceName);
}
#endregion
#region AddMetroVersionNode
private void AddMetroVersionNode(string namespaceName)
{
XName propertyGroupName = XName.Get("PropertyGroup", namespaceName);
XName vsVersionName = XName.Get("VisualStudioVersion", namespaceName);
XElement metroVersionElement = new XElement(propertyGroupName);
metroVersionElement.Add(new XAttribute("Condition",
" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '11.0' "));
metroVersionElement.Add(new XElement(vsVersionName, "11.0"));
currentProject.Root.Add(metroVersionElement);
}
#endregion
#region AddAppManifestNode
private void AddAppManifestNode(string namespaceName)
{
if(isCurrentProjectExecutable == false)
return;
XName itemGroupName = XName.Get("ItemGroup", namespaceName);
XName appxManifestName = XName.Get("AppxManifest", namespaceName);
XName subTypeName = XName.Get("SubType", namespaceName);
XElement newItemGroup = new XElement(itemGroupName);
XElement appManifestElement = new XElement(appxManifestName);
newItemGroup.Add(appManifestElement);
appManifestElement.Add(new XAttribute("Include", "Manifest.appxmanifest"));
appManifestElement.Add(new XElement(subTypeName, "Designer"));
currentProject.Root.Add(newItemGroup);
}
#endregion
}
}