Esempio n. 1
0
        public virtual void Compile(CompileOption compileOption, string path)
        {
            CompilerResults results;



            var parameters = new CompilerParameters();

            parameters.ReferencedAssemblies.AddRange(compileOption.LibraryRefrences);
            parameters.CompilerOptions = "/appconfig:\"" + (_fileSystemManager.RelativeToAbsolutePath("~/") + "web.config\"")
                                         .Replace("//", "/");
            parameters.GenerateInMemory      = false;
            parameters.GenerateExecutable    = compileOption.GenerateExecutable;
            parameters.TreatWarningsAsErrors = false;
            parameters.OutputAssembly        = path;
            //parameters.CoreAssemblyFileName = "System.dll";
            parameters.IncludeDebugInformation = compileOption.IncludeDebugInformation;

            parameters.TempFiles = HttpContext.Current.Request.IsLocal ?
                                   new TempFileCollection(Environment.GetEnvironmentVariable(Temp), true)
                : new TempFileCollection(Environment.GetEnvironmentVariable(Temp), false);


            if (compileOption.CodeProvider == SourceType.Csharp)
            {
                if (Convert.ToBoolean(WebConfigManager.GetSettingByOption(RoslynCompiler).Value))
                {
                    //roslyn compiler
                    var cSharpCodeProvider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();

                    results = cSharpCodeProvider.CompileAssemblyFromSource(parameters, compileOption.Code);
                }
                else
                {
                    //old compiler
                    var cSharpCodeProvider = CodeDomProvider.CreateProvider(CSharp);

                    results = cSharpCodeProvider.CompileAssemblyFromSource(parameters, compileOption.Code);
                }
            }
            else
            {
                if (Convert.ToBoolean(WebConfigManager.GetSettingByOption(RoslynCompiler).Value))
                {
                    //roslyn compiler
                    var vBCodeProvider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider();
                    results = vBCodeProvider.CompileAssemblyFromSource(parameters, compileOption.Code);
                }
                else
                {
                    //old compiler
                    var vBCodeProvider = CodeDomProvider.CreateProvider(VisualBasic);
                    results = vBCodeProvider.CompileAssemblyFromSource(parameters, compileOption.Code);
                }
            }

            if (results.Errors.HasErrors)
            {
                var warnings = new StringBuilder();
                var errors   = new StringBuilder();
                foreach (CompilerError error in results.Errors)
                {
                    if (error.IsWarning)
                    {
                        warnings.AppendLine($"Warning ({error.ErrorNumber}): {error.ErrorText}  , Line : {error.Line} , Column : {error.Column} . <br>");
                    }
                    else
                    {
                        errors.AppendLine($"Error ({error.ErrorNumber}): {error.ErrorText} , Line : {error.Line} , Column : {error.Column} . <br>");
                    }
                }

                throw new KhodkarInvalidException(errors.ToString() + warnings);
            }
        }
Esempio n. 2
0
        public virtual string GenrateWcfCode(string xsdlUrl, string language)
        {
            //"/develop/code/os/dotnet/WebService/GetWcfGenreatedCode/" + wcfGuid
            Uri mexAddress = new Uri(xsdlUrl);
            MetadataExchangeClientMode mexMode = MetadataExchangeClientMode.HttpGet;

            // Get Metadata file from service
            MetadataExchangeClient mexClient = new MetadataExchangeClient(new EndpointAddress(mexAddress));

            mexClient.ResolveMetadataReferences = true;
            MetadataSet metaSet = mexClient.GetMetadata(mexAddress, mexMode);



            //Import all contracts and endpoints
            WsdlImporter importer = new WsdlImporter(metaSet);

            Collection <ContractDescription> contracts    = importer.ImportAllContracts();
            ServiceEndpointCollection        allEndpoints = importer.ImportAllEndpoints();

            //Generate type information for each contract
            ServiceContractGenerator generator = new ServiceContractGenerator();

            // var endpointsForContracts = new Dictionary<string, IEnumerable<ServiceEndpoint>>();

            foreach (ContractDescription contract in contracts)
            {
                generator.GenerateServiceContractType(contract);
                // Keep a list of each contract's endpoints
                //  endpointsForContracts[contract.Name] = allEndpoints.Where(se => se.Contract.Name == contract.Name).ToList();
            }

            if (generator.Errors.Count != 0)
            {
                throw new KhodkarInvalidException(LanguageManager.ToAsErrorMessage(ExceptionKey.WebServiceCodeGenratorError));
            }

            // Generate a code file for the contracts
            CodeGeneratorOptions options = new CodeGeneratorOptions();

            options.BracingStyle = "C";
            //CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider(language == "csharp" ? "C#": "VisualBasic");



            //      System.CodeDom.Compiler.IndentedTextWriter textWriter
            //= new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFilePath));
            StringBuilder stringBuilder = new StringBuilder();
            StringWriter  textWriter    = new StringWriter(stringBuilder);



            if (language == "csharp")
            {
                if (Convert.ToBoolean(WebConfigManager.GetSettingByOption(RoslynCompiler).Value))
                {
                    //roslyn compiler
                    var cSharpCodeProvider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();


                    cSharpCodeProvider.GenerateCodeFromCompileUnit(
                        generator.TargetCompileUnit, textWriter, options
                        );
                }
                else
                {
                    //old compiler
                    var cSharpCodeProvider = CodeDomProvider.CreateProvider(CSharp);


                    cSharpCodeProvider.GenerateCodeFromCompileUnit(
                        generator.TargetCompileUnit, textWriter, options
                        );
                }
            }
            else
            {
                if (Convert.ToBoolean(WebConfigManager.GetSettingByOption(RoslynCompiler).Value))
                {
                    //roslyn compiler
                    var vBCodeProvider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider();
                    vBCodeProvider.GenerateCodeFromCompileUnit(
                        generator.TargetCompileUnit, textWriter, options
                        );
                }
                else
                {
                    //old compiler
                    var vBCodeProvider = CodeDomProvider.CreateProvider(VisualBasic);
                    vBCodeProvider.GenerateCodeFromCompileUnit(
                        generator.TargetCompileUnit, textWriter, options
                        );
                }
            }

            textWriter.Close();

            return(stringBuilder.ToString());



            // File.WriteAllText(outputFilePath, outputFile, Encoding.UTF8);



            //// Compile the code file to an in-memory assembly
            //// Don't forget to add all WCF-related assemblies as references
            //CompilerParameters compilerParameters = new CompilerParameters(
            //    new string[] {
            //        "System.dll", "System.ServiceModel.dll",
            //        "System.Runtime.Serialization.dll" });
            //compilerParameters.GenerateInMemory = true;

            //CompilerResults results = codeDomProvider.CompileAssemblyFromDom(compilerParameters, generator.TargetCompileUnit);

            //if (results.Errors.Count > 0)
            //{
            //    throw new Exception("There were errors during generated code compilation");
            //}

            //// Find the proxy type that was generated for the specified contract
            //// (identified by a class that implements
            //// the contract and ICommunicationbject)
            //Type clientProxyType = results.CompiledAssembly.GetTypes().First(t => t.IsClass && t.GetInterface(contractName)
            //!= null && t.GetInterface(typeof(ICommunicationObject).Name) != null);

            //// Get the first service endpoint for the contract
            //ServiceEndpoint serviceEndPoint = endpointsForContracts[contractName].First();
            //object instance = results.CompiledAssembly.CreateInstance(clientProxyType.Name,
            //    false, System.Reflection.BindingFlags.CreateInstance, null, new object[] { serviceEndPoint.Binding, serviceEndPoint.Address }, CultureInfo.CurrentCulture, null);
        }