Информация об изменениях

Сообщение Re[5]: Ошибка Компиляция Scripting API от 05.09.2016 8:25

Изменено 05.09.2016 11:20 Serginio1

Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Sinix, Вы писали:


S>Кстати работает в .Net Core и Scripting API


S>
S>public static void TestRoslynScript()
S>        {
S>            object result = Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync("1 + 2").Result;
S>            Console.WriteLine(result.ToString());
S>            Console.ReadLine();

S>        }
S>


И более сложные работают

 static  String ПолучитьСтрокуДелегата()
        {
            string returnStr = @"return (MatchEvaluator)((match) =>
            {
              string x = match.Value;
            // If the first char is lower case...
        if (char.IsLower(x[0]))
        {
            // Capitalize it.
            return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
        }
        return x;

            });";

            return returnStr;

        }


        static MatchEvaluator ПолучитьДелегат()
        {
            return (MatchEvaluator)((match) =>
               {
                   string x = match.Value;
                   // If the first char is lower case...
                   if (char.IsLower(x[0]))
                   {
                       // Capitalize it.
                       return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
                   }
                   return x;


               });
               }
        public static void ТестRegex()
        {
           
             string words = "надо заменить все первые буквы в словах на заглавные";
            string pattern = @"\w+";

            
            var scr = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default;

// Добавил ссылку на mscrlib 
 var scr = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default;
            var mscrlib = Assembly.Load(System.Runtime.Loader.AssemblyLoadContext.GetAssemblyName(@"c:\Users\Smirnov_SA\.nuget\packages\Microsoft.NETCore.Portable.Compatibility\1.0.0\ref\netcore50\mscorlib.dll"));
            scr =scr.WithReferences(mscrlib,typeof(MulticastDelegate).GetTypeInfo().Assembly, typeof(System.Runtime.CompilerServices.IStrongBox).GetTypeInfo().Assembly, typeof(MatchEvaluator).GetTypeInfo().Assembly);
            


            scr = scr.WithImports("System", "System.Text.RegularExpressions");

                   

              var result = Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync(ПолучитьСтрокуДелегата(), scr).Result;
              MatchEvaluator evaluator = (MatchEvaluator)result;
           // MatchEvaluator evaluator = ПолучитьДелегат();
             Console.WriteLine(Regex.Replace(words, pattern, evaluator));        }


Все работает
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Sinix, Вы писали:


S>Кстати работает в .Net Core и Scripting API


S>
S>public static void TestRoslynScript()
S>        {
S>            object result = Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync("1 + 2").Result;
S>            Console.WriteLine(result.ToString());
S>            Console.ReadLine();

S>        }
S>


И более сложные работают

 static  String ПолучитьСтрокуДелегата()
        {
            string returnStr = @"return (MatchEvaluator)((match) =>
            {
              string x = match.Value;
            // If the first char is lower case...
        if (char.IsLower(x[0]))
        {
            // Capitalize it.
            return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
        }
        return x;

            });";

            return returnStr;

        }


        static MatchEvaluator ПолучитьДелегат()
        {
            return (MatchEvaluator)((match) =>
               {
                   string x = match.Value;
                   // If the first char is lower case...
                   if (char.IsLower(x[0]))
                   {
                       // Capitalize it.
                       return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
                   }
                   return x;


               });
               }
        public static void ТестRegex()
        {
           
             string words = "надо заменить все первые буквы в словах на заглавные";
            string pattern = @"\w+";

            
            var scr = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default;

// Добавил ссылку на mscrlib 
 var scr = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default;
            var mscrlib = Assembly.Load(System.Runtime.Loader.AssemblyLoadContext.GetAssemblyName(@"c:\Users\Smirnov_SA\.nuget\packages\Microsoft.NETCore.Portable.Compatibility\1.0.1\ref\netcore50\mscorlib.dll"));
            scr =scr.WithReferences(mscrlib,typeof(MulticastDelegate).GetTypeInfo().Assembly, typeof(System.Runtime.CompilerServices.IStrongBox).GetTypeInfo().Assembly, typeof(MatchEvaluator).GetTypeInfo().Assembly);
            


            scr = scr.WithImports("System", "System.Text.RegularExpressions");

                   

              var result = Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync(ПолучитьСтрокуДелегата(), scr).Result;
              MatchEvaluator evaluator = (MatchEvaluator)result;
           // MatchEvaluator evaluator = ПолучитьДелегат();
             Console.WriteLine(Regex.Replace(words, pattern, evaluator));        }


Все работает