.NET 3.5 CODEDOM COMBILER, генерирующих нечетные ошибки
-
27-09-2020 - |
Вопрос
Это далеко дольше, но я собираюсь попробовать объяснить проблему как можно лучшее. Я использую компилятор CODEDOM в .NET 3.5 для компиляции 3 CS-файлов ... 2 из которых были сгенерированы из EDMGEN.exe и 1 - это динамически сгенерированный файл. Код компиляции выглядит как это
CompilerResults results = compiler.CompileAssemblyFromFileBatch(parameters, new string[]{string.Format("{0}\\Dynamic.cs", Directory.GetCurrentDirectory()),
string.Format("{0}\\{1}.ObjectLayer.cs", Directory.GetCurrentDirectory(), ModelName), string.Format("{0}\\{1}.Views.cs", Directory.GetCurrentDirectory(), ModelName)});
.
Когда все три из этих файлов объединяются вместе, я получаю эту ошибку
Неверный токен 'void "в классе, структуре или декларации участника интерфейса
Я бы предположил, что эта ошибка ссылается на эту строку кода, расположенной в ObjectLayer.cs
Частичная пустота OnidChanged ();
Однако, если эти 3 файла включены в новый проект VS2010 и скомпилированы через этот компилятор, они работают нормально ... Эта ошибка происходит только с компилятором Codedom ... оно имеет некоторую проблему с «частичным void» ,
Я нашел проблему очень похожую на это здесь http:// Социальные .msdn.microsoft.com / Форумы / EN-US / LinqprojectGeneral / Thread / 85E085C8-B6AC-4CAE-B59D-7B9CE7758122 /
Однако это исправление не работает, потому что я использую компилятор Codedom не VS компилятор ....
Решение
проблема решена!
Это все еще очень странно на мой взгляд, но под .NET 3.5 компилятор CODEDEDOM по умолчанию хочет использовать компилятор .NET 2 CSC.EXE .... Это вызывает конфликты с моими файлами CS.
Вы должны указать версию компилятора
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
.
что одна выложена решена все мои проблемы.