public ServiceFacade(VisualStudio visualStudio)
        {
            vsInstance = visualStudio;
            selectedItem = vsInstance.SelectedItem;
            currentProject = vsInstance.SelectedProject;
			outputWindowWriter = new OutputWindowWriter(visualStudio.ApplicationObject);
        }
示例#2
0
        private bool ProcessCodeGenerationRequestCore(string wsdlFile)
        {
            try
            {
                VisualStudioProject      project      = this.VisualStudio.SelectedProject;
                VisualStudioSelectedItem selectedItem = this.VisualStudio.SelectedItem;

                // Fist display the UI and get the options.
                WebServiceCodeGenDialogNew dialog = new WebServiceCodeGenDialogNew();
                if (!project.IsWebProject)
                {
                    dialog.DestinationNamespace = project.AssemblyNamespace;
                }
                dialog.DestinationFilename = project.GetDefaultDestinationFilename(wsdlFile);

                if (!selectedItem.IsProject)
                {
                    //dialog.WsdlLocation = selectedItem.FileName;
                    dialog.WsdlLocation = wsdlFile;
                }
                if (dialog.ShowDialog() == DialogResult.Cancel)
                {
                    return(false);
                }

                wsdlFile = dialog.WsdlPath;
                // Try the Rpc2DocumentLiteral translation first.
                // wsdlFile = TryTranslateRpc2DocumentLiteral(wsdlFile);

                CodeGenerationOptions options = new CodeGenerationOptions();
                options.MetadataLocation = wsdlFile;
                options.ClrNamespace     = dialog.DestinationNamespace;
                options.OutputFileName   = dialog.DestinationFilename;
                options.OutputLocation   = GetOutputDirectory();
                options.ProjectDirectory = project.ProjectDirectory;
                options.Language         = project.ProjectLanguage;
                options.ProjectName      = project.ProjectName;
                // TODO: Infer the config file type according to the project type
                // and merge the generated config file with the existing one.
                options.ConfigurationFile         = "output.config";
                options.GenerateService           = dialog.ServiceCode;
                options.GenerateProperties        = dialog.GenerateProperties;
                options.VirtualProperties         = dialog.VirtualProperties;
                options.FormatSoapActions         = dialog.FormatSoapActions;
                options.GenerateCollections       = dialog.Collections;
                options.GenerateTypedLists        = dialog.GenericList;
                options.EnableDataBinding         = dialog.EnableDataBinding;
                options.GenerateOrderIdentifiers  = dialog.OrderIdentifiers;
                options.GenerateAsyncCode         = dialog.AsyncMethods;
                options.GenerateSeparateFiles     = dialog.GenerateMultipleFiles;
                options.AdjustCasing              = dialog.ChangeCasing;
                options.OverwriteExistingFiles    = dialog.Overwrite;
                options.EnableWsdlEndpoint        = dialog.EnabledWsdlEndpoint;
                options.GenerateSvcFile           = dialog.GenerateSvcFile;
                options.ConcurrencyMode           = dialog.ConcurrencyMode;
                options.InstanceContextMode       = dialog.InstanceContextMode;
                options.UseSynchronizationContext = dialog.UseSynchronizationContext;
                options.MethodImplementation      = dialog.MethodImplementation;

                OutputWindowWriter.Clear();

                CodeGenerator    codeGenerator = new CodeGenerator();
                CodeWriterOutput output        = codeGenerator.GenerateCode(options);

                AddGeneratedFilesToProject(output);

                // Finally add the project references.
                AddAssemblyReferences();

                // add custom assembly references if necessary
                if (options.EnableWsdlEndpoint)
                {
                    AddMetadataExtensionsReference();
                }

                MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (ClientServiceGenerationException ex)
            {
                AppLog.LogMessage(ex.ToString());

                const string separator = "---------------------------------------------------------------------------------";
                foreach (string message in ex.Messages)
                {
                    OutputWindowWriter.WriteMessage(message + "\r\n" + separator + "\r\n");
                }

                MessageBox.Show("Errors were found while importing the contract. Please check the 'WSCF.blue' pane in the Output window for more information.",
                                "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                AppLog.LogMessage(ex.ToString());
                MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // TODO: Log the exception.
                //System.Diagnostics.Debugger.Break();
            }
            return(true);
        }
示例#3
0
        private void AddFileToCurrentProject(string file)
        {
            VisualStudioProject project = this.VisualStudio.SelectedProject;

            project.AddFile(file);
        }
示例#4
0
        } // End of ProcessCodeGenerationRequestFunction.

        // This method is not current being used.
        private bool ProcessXsdCodeGenerationRequest()
        {
            if (!CanGenerateCode())
            {
                return(false);
            }

            try
            {
                VisualStudioProject project = VisualStudio.SelectedProject;
                IEnumerable <VisualStudioSelectedItem> selectedItems = VisualStudio.SelectedItems;

                if (selectedItems.Count() == 0)
                {
                    MessageBox.Show(
                        "Cannot generate code for items outside of a project.",
                        "Web Services Contract-First code generation",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                foreach (VisualStudioSelectedItem selectedItem in selectedItems)
                {
                    string extension = Path.GetExtension(selectedItem.FileName).ToLower();
                    if (extension == ".xsd" || extension == ".wsdl")
                    {
                        continue;
                    }

                    MessageBox.Show(
                        "Data Contracts can only be generated for .xsd or .wsdl files.",
                        "Web Services Contract-First code generation",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                string[]         dataContractFiles = selectedItems.Select(i => i.FileName).ToArray();
                XsdCodeGenDialog dialogForm        = new XsdCodeGenDialog(dataContractFiles);
                if (!project.IsWebProject)
                {
                    dialogForm.Namespace = project.AssemblyNamespace;
                }
                dialogForm.TargetFileName = project.GetDefaultDestinationFilename(dataContractFiles[0]);

                if (dialogForm.ShowDialog() == DialogResult.Cancel)
                {
                    return(false);
                }

                CodeGenerationOptions options = new CodeGenerationOptions();
                options.GenerateDataContracts    = true;
                options.DataContractFiles        = dataContractFiles;
                options.GenerateProperties       = dialogForm.PublicProperties;
                options.VirtualProperties        = dialogForm.VirtualProperties;
                options.GenerateCollections      = dialogForm.Collections;
                options.GenerateSeparateFiles    = dialogForm.GenerateMultipleFiles;
                options.OverwriteExistingFiles   = dialogForm.OverwriteFiles;
                options.AdjustCasing             = dialogForm.AdjustCasing;
                options.EnableDataBinding        = dialogForm.DataBinding;
                options.GenerateOrderIdentifiers = dialogForm.OrderIdentifiers;
                options.GenerateTypedLists       = dialogForm.GenericLists;
                options.ClrNamespace             = dialogForm.Namespace;
                options.OutputFileName           = dialogForm.TargetFileName;
                options.OutputLocation           = GetOutputDirectory();
                options.ProjectDirectory         = project.ProjectDirectory;
                options.Language    = project.ProjectLanguage;
                options.ProjectName = project.ProjectName;

                CodeGenerator    codeGenerator = new CodeGenerator();
                CodeWriterOutput output        = codeGenerator.GenerateCode(options);

                AddGeneratedFilesToProject(output);

                // Finally add the project references.
                AddAssemblyReferences();

                MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                AppLog.LogMessage(ex.ToString());
                MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // TODO: Log the exception.
                //System.Diagnostics.Debugger.Break();
            }
            return(true);
        } // End of ProcessXsdCodeGenerationRequestFunction.