CompileAssemblyFromSource + Obfuscation = не работает

У меня есть рабочий код CompileAssemblyFromSource. Но когда я использую любой защитник кода, такой как RedGate SmartAssembly или Themida, он перестает работать, и я получаю сообщение об ошибке "Не удалось загрузить файл или сборку или одну из ее зависимостей". Можете ли вы помочь мне с этим?

using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;

namespace stringToCode
{
    public class Program
    {
        public static int q = 0;
        static void Main(string[] args)
        {
            try
            {
                string source = "namespace stringToCode { public class FooClass { public void Execute() { Program.q = 1; } } }";

                Console.WriteLine("q=" + q);
                using (var foo = new CSharpCodeProvider())
                {
                    var parameters = new CompilerParameters();
                    parameters.GenerateInMemory = true;

                    foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
                    {
                        try
                        {
                            string location = assembly.Location;
                            if (!String.IsNullOrEmpty(location))
                            {
                                parameters.ReferencedAssemblies.Add(location);
                            }
                        }
                        catch (NotSupportedException)
                        { }
                    }

                    var res = foo.CompileAssemblyFromSource(parameters, source);
                    var type = res.CompiledAssembly.GetType("stringToCode.FooClass");
                    var obj = Activator.CreateInstance(type);
                    var output = type.GetMethod("Execute").Invoke(obj, new object[] { });

                    Console.WriteLine("q=" + q);
                }
            }
            catch (Exception e)
            {
               Console.WriteLine(e.Message);;
            }
            Console.ReadLine();
        }
    }
}

1 ответ

Решение

Извините за мой вопрос. Я просто понимаю, почему это происходит) Это код является примером. Основная проблема у меня с кодом, который я получаю с сервера. Поэтому, когда я запутываю свои переменные, я не запутываю их в своем "онлайн" коде, который я использую с CompileAssemblyFromSource. Так что это просто не может работать. Потому что переменные не имеют одинаковых имен.

Другие вопросы по тегам