Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / XamlBuildTask / Microsoft / Build / Tasks / Xaml / GenerateTemporaryAssemblyTask.cs / 1407647 / GenerateTemporaryAssemblyTask.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace Microsoft.Build.Tasks.Xaml { using System; using System.CodeDom; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.IO; using System.Xaml; using System.Xaml.Schema; using System.Xml; using System.Xml.Linq; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using System.Reflection; using System.Globalization; using System.Diagnostics.CodeAnalysis; using System.Runtime; [Fx.Tag.XamlVisible(true)] public class GenerateTemporaryAssemblyTask : Task { const string MSBuildNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"; public GenerateTemporaryAssemblyTask() { } [Required] public string AssemblyName { get; set; } [Required] public string OutputPath { get; set; } [Required] public string CurrentProject { get; set; } [Fx.Tag.KnownXamlExternal] [Required] public ITaskItem[] SourceCodeFiles { get; set; } [Required] public string CompileTargetName { get; set; } [Fx.Tag.KnownXamlExternal] public ITaskItem[] ReferencePaths { get; set; } [Required] public string ApplicationMarkupTypeName { get; set; } public override bool Execute() { bool retVal; try { XDocument projectDocument = XDocument.Load(this.CurrentProject); if (projectDocument != null) { XElement projectElement = projectDocument.Element(XName.Get("Project", MSBuildNamespace)); if (projectElement != null) { RemoveItemsByName(projectElement, ApplicationMarkupTypeName); RemoveItemsByName(projectElement, "Reference"); AddNewItems(projectElement, "Compile", SourceCodeFiles); AddNewItems(projectElement, "ReferencePath", ReferencePaths); RemovePropertyByName(projectElement, "OutputType"); RemovePropertyByName(projectElement, "AssemblyName"); AddNewProperties(projectElement, new ProjectProperty[] { new ProjectProperty() { Name = "OutputType", Value = "Library" }, new ProjectProperty() {Name = "AssemblyName", Value = AssemblyName }, new ProjectProperty() { Name = "Utf8Output", Value = "true", Condition = "'$(Utf8Output)' == ''" } }); } } string filename = Path.ChangeExtension(Path.GetRandomFileName(), ".tmp_proj"); projectDocument.Save(filename); Hashtable globalProperties = new Hashtable(); globalProperties["IntermediateOutputPath"] = this.OutputPath; globalProperties["AssemblyName"] = this.AssemblyName; globalProperties["OutputType"] = "Library"; retVal = base.BuildEngine.BuildProjectFile(filename, new string[] { this.CompileTargetName }, globalProperties, null); File.Delete(filename); return retVal; } catch (Exception e) { if (Fx.IsFatal(e)) { throw; } // Log unknown errors that do not originate from the task. // Assumes that all known errors are logged when the exception is thrown. XamlBuildTaskServices.LogException(this, e.Message); retVal = false; } return retVal; } void RemoveItemsByName(XElement project, string itemName) { if (!string.IsNullOrEmpty(itemName)) { IEnumerableitemGroups = project.Elements(XName.Get("ItemGroup", MSBuildNamespace)); itemGroups.Elements(XName.Get(itemName, MSBuildNamespace)).Remove(); } } void AddNewItems(XElement project, string itemName, ITaskItem[] items) { if (!string.IsNullOrEmpty(itemName) && items != null) { XElement newItemGroup = new XElement(XName.Get("ItemGroup", MSBuildNamespace)); project.Add(newItemGroup); foreach (ITaskItem item in items) { XElement newElement = new XElement(XName.Get(itemName, MSBuildNamespace)); XAttribute include = new XAttribute("Include", item.ItemSpec); newElement.Add(include); newItemGroup.Add(newElement); } } } void RemovePropertyByName(XElement project, string propertyName) { if (!string.IsNullOrEmpty(propertyName)) { IEnumerable itemGroups = project.Elements(XName.Get("PropertyGroup", MSBuildNamespace)); itemGroups.Elements(XName.Get(propertyName, MSBuildNamespace)).Remove(); } } void AddNewProperties(XElement project, IEnumerable properties) { if (properties != null) { XElement newPropertyGroup = new XElement(XName.Get("PropertyGroup", MSBuildNamespace)); project.Add(newPropertyGroup); foreach (ProjectProperty prop in properties) { if (!string.IsNullOrEmpty(prop.Name) && prop.Value != null) { XElement newElement = new XElement(XName.Get(prop.Name, MSBuildNamespace)); newElement.Value = prop.Value; if (!string.IsNullOrEmpty(prop.Condition)) { newElement.SetAttributeValue(XName.Get("Condition", string.Empty), prop.Condition); } newPropertyGroup.Add(newElement); } } } } class ProjectProperty { public string Name { get; set; } public string Value { get; set; } public string Condition { get; set; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace Microsoft.Build.Tasks.Xaml { using System; using System.CodeDom; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.IO; using System.Xaml; using System.Xaml.Schema; using System.Xml; using System.Xml.Linq; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using System.Reflection; using System.Globalization; using System.Diagnostics.CodeAnalysis; using System.Runtime; [Fx.Tag.XamlVisible(true)] public class GenerateTemporaryAssemblyTask : Task { const string MSBuildNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"; public GenerateTemporaryAssemblyTask() { } [Required] public string AssemblyName { get; set; } [Required] public string OutputPath { get; set; } [Required] public string CurrentProject { get; set; } [Fx.Tag.KnownXamlExternal] [Required] public ITaskItem[] SourceCodeFiles { get; set; } [Required] public string CompileTargetName { get; set; } [Fx.Tag.KnownXamlExternal] public ITaskItem[] ReferencePaths { get; set; } [Required] public string ApplicationMarkupTypeName { get; set; } public override bool Execute() { bool retVal; try { XDocument projectDocument = XDocument.Load(this.CurrentProject); if (projectDocument != null) { XElement projectElement = projectDocument.Element(XName.Get("Project", MSBuildNamespace)); if (projectElement != null) { RemoveItemsByName(projectElement, ApplicationMarkupTypeName); RemoveItemsByName(projectElement, "Reference"); AddNewItems(projectElement, "Compile", SourceCodeFiles); AddNewItems(projectElement, "ReferencePath", ReferencePaths); RemovePropertyByName(projectElement, "OutputType"); RemovePropertyByName(projectElement, "AssemblyName"); AddNewProperties(projectElement, new ProjectProperty[] { new ProjectProperty() { Name = "OutputType", Value = "Library" }, new ProjectProperty() {Name = "AssemblyName", Value = AssemblyName }, new ProjectProperty() { Name = "Utf8Output", Value = "true", Condition = "'$(Utf8Output)' == ''" } }); } } string filename = Path.ChangeExtension(Path.GetRandomFileName(), ".tmp_proj"); projectDocument.Save(filename); Hashtable globalProperties = new Hashtable(); globalProperties["IntermediateOutputPath"] = this.OutputPath; globalProperties["AssemblyName"] = this.AssemblyName; globalProperties["OutputType"] = "Library"; retVal = base.BuildEngine.BuildProjectFile(filename, new string[] { this.CompileTargetName }, globalProperties, null); File.Delete(filename); return retVal; } catch (Exception e) { if (Fx.IsFatal(e)) { throw; } // Log unknown errors that do not originate from the task. // Assumes that all known errors are logged when the exception is thrown. XamlBuildTaskServices.LogException(this, e.Message); retVal = false; } return retVal; } void RemoveItemsByName(XElement project, string itemName) { if (!string.IsNullOrEmpty(itemName)) { IEnumerable itemGroups = project.Elements(XName.Get("ItemGroup", MSBuildNamespace)); itemGroups.Elements(XName.Get(itemName, MSBuildNamespace)).Remove(); } } void AddNewItems(XElement project, string itemName, ITaskItem[] items) { if (!string.IsNullOrEmpty(itemName) && items != null) { XElement newItemGroup = new XElement(XName.Get("ItemGroup", MSBuildNamespace)); project.Add(newItemGroup); foreach (ITaskItem item in items) { XElement newElement = new XElement(XName.Get(itemName, MSBuildNamespace)); XAttribute include = new XAttribute("Include", item.ItemSpec); newElement.Add(include); newItemGroup.Add(newElement); } } } void RemovePropertyByName(XElement project, string propertyName) { if (!string.IsNullOrEmpty(propertyName)) { IEnumerable itemGroups = project.Elements(XName.Get("PropertyGroup", MSBuildNamespace)); itemGroups.Elements(XName.Get(propertyName, MSBuildNamespace)).Remove(); } } void AddNewProperties(XElement project, IEnumerable properties) { if (properties != null) { XElement newPropertyGroup = new XElement(XName.Get("PropertyGroup", MSBuildNamespace)); project.Add(newPropertyGroup); foreach (ProjectProperty prop in properties) { if (!string.IsNullOrEmpty(prop.Name) && prop.Value != null) { XElement newElement = new XElement(XName.Get(prop.Name, MSBuildNamespace)); newElement.Value = prop.Value; if (!string.IsNullOrEmpty(prop.Condition)) { newElement.SetAttributeValue(XName.Get("Condition", string.Empty), prop.Condition); } newPropertyGroup.Add(newElement); } } } } class ProjectProperty { public string Name { get; set; } public string Value { get; set; } public string Condition { get; set; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DBDataPermission.cs
- VisualBasicSettingsHandler.cs
- XmlILAnnotation.cs
- DuplicateWaitObjectException.cs
- SafeEventLogWriteHandle.cs
- MultiSelector.cs
- ResolveMatchesCD1.cs
- LinkTarget.cs
- WebPartConnectVerb.cs
- SqlDataAdapter.cs
- ListViewItemMouseHoverEvent.cs
- DerivedKeyCachingSecurityTokenSerializer.cs
- SocketException.cs
- RawStylusInputReport.cs
- WorkflowOwnershipException.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- HyperLinkStyle.cs
- Base64Decoder.cs
- ResolveResponseInfo.cs
- NegotiateStream.cs
- ClientConvert.cs
- XamlPointCollectionSerializer.cs
- ProfileSettingsCollection.cs
- VectorValueSerializer.cs
- MimeFormReflector.cs
- DetailsViewInsertEventArgs.cs
- ExtensionQuery.cs
- DesignRelationCollection.cs
- DataGridSortingEventArgs.cs
- WebControl.cs
- GenericTextProperties.cs
- DataGridViewDataErrorEventArgs.cs
- GroupBox.cs
- NavigatingCancelEventArgs.cs
- Literal.cs
- UriExt.cs
- ProtocolElement.cs
- SafeArrayTypeMismatchException.cs
- ExpressionDumper.cs
- StagingAreaInputItem.cs
- mda.cs
- sqlstateclientmanager.cs
- TreeNodeMouseHoverEvent.cs
- TextRunCache.cs
- X509Certificate2Collection.cs
- WasAdminWrapper.cs
- CacheDependency.cs
- WindowsListViewScroll.cs
- TextOutput.cs
- HttpHandlerActionCollection.cs
- ResourcePool.cs
- InfoCardSymmetricAlgorithm.cs
- IconHelper.cs
- DiffuseMaterial.cs
- LabelTarget.cs
- CodeDOMProvider.cs
- CompilerError.cs
- AggregateNode.cs
- JapaneseLunisolarCalendar.cs
- BaseTransportHeaders.cs
- TextBoxAutomationPeer.cs
- ListViewItemMouseHoverEvent.cs
- Point3D.cs
- UnsafeNativeMethods.cs
- ToolBarButtonClickEvent.cs
- NestedContainer.cs
- PreProcessInputEventArgs.cs
- PathGradientBrush.cs
- DataIdProcessor.cs
- CompleteWizardStep.cs
- ResolvePPIDRequest.cs
- DataGridViewElement.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- bindurihelper.cs
- DataBindingHandlerAttribute.cs
- UserPreferenceChangedEventArgs.cs
- Misc.cs
- Event.cs
- Merger.cs
- DebugView.cs
- HotCommands.cs
- KeyGesture.cs
- CaseStatement.cs
- HealthMonitoringSectionHelper.cs
- DataGridViewRow.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- CharacterString.cs
- OraclePermissionAttribute.cs
- InternalsVisibleToAttribute.cs
- DirectoryRedirect.cs
- XmlDigitalSignatureProcessor.cs
- SvcFileManager.cs
- DecoderReplacementFallback.cs
- MessageFilterTable.cs
- DataServiceConfiguration.cs
- XmlObjectSerializerReadContextComplex.cs
- DataGridViewRowsAddedEventArgs.cs
- XmlQueryStaticData.cs
- BasicExpandProvider.cs
- SqlConnectionPoolGroupProviderInfo.cs