CppCodeProvider, CompileAssemblyFromFile создает System.NotImplementedException - PullRequest
2 голосов
/ 15 декабря 2010

Документация по компиляции C ++ / CLI с использованием каркасов классов CodeDom несколько отсутствует.

Справочная информация: я пытаюсь написать системные тесты для части программного обеспечения, которую я написал. Программное обеспечение генерирует код, и я хочу проверить, что этот код может быть скомпилирован и что скомпилированный код работает как задумано.

Код для компиляции и тестирования находится в нескольких исходных файлах. Я хочу скомпилировать исходный файл в сборку, а затем динамически вызывать методы в нем. Я экспериментировал с созданием одних и тех же исходных текстов на C #, и у меня была успешная сборка и тестирование за несколько минут Компилятор C ++ всегда выдает исключение System.NotImplementedException.

Вот код, который взрывает меня:

namespace CppCompilerTest {
    class Program {
        static void Main(string[] args) {
            try {
                string strSourceDir = @"D:\Projects\CppCompilerTest\CppSource";

                using (var codeProvider = new CppCodeProvider7()) {
                    var options = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = false };
                    options.ReferencedAssemblies.Add("System.dll");
                    CompilerResults results = codeProvider.CompileAssemblyFromFile(
                        options,
                        new[] {
                            Path.Combine(strSourceDir, "SourceFile1.cpp"),
                            Path.Combine(strSourceDir, "SourceFile2.cpp")                               
                        }
                    );
                }
            } catch(Exception ex) {
                Console.WriteLine(ex);
            }

            Console.WriteLine("Press any key to continue");
            Console.ReadKey();
        }
    }
}

Полностью ли я что-то упустил? Мне интересно, может быть, путь cl.exe - более быстрый маршрут ...

...