Вопрос

Это далеко дольше, но я собираюсь попробовать объяснить проблему как можно лучшее. Я использую компилятор 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 компилятор ....

Я также хотел бы отметить, что я попробовал компилятор CSC.exe), и это также работал нормально. И я также проверил этот точный код под .NET 4, который также работает. Эта проблема, кажется, подходит только под .NET 3.5

Любой, кто когда-либо вступал в это или имеет идею, почему компилятор Codedom .Net 3.5 будет иметь проблемы с частичными пустотами?

Это было полезно?

Решение

проблема решена!

Это все еще очень странно на мой взгляд, но под .NET 3.5 компилятор CODEDEDOM по умолчанию хочет использовать компилятор .NET 2 CSC.EXE .... Это вызывает конфликты с моими файлами CS.

Вы должны указать версию компилятора

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
.

что одна выложена решена все мои проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top