2010-07-22 3 views
0

Это далеко, но я попытаюсь объяснить проблему как можно лучше. Я использую компилятор CodeDom в .Net 3.5 для компиляции 3 cs-файлов ... 2 из которых были сгенерированы из Edmgen.exe, а 1 - динамически сгенерированный файл. Компиляции кода выглядит следующим образом.Net 3.5 Компилятор CodeDom, генерирующий нечетные ошибки

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)}); 

Когда все три из этих файлов компилировать вместе, я получаю эту ошибку

Пустоты в классе, структура или декларации элемента интерфейса

I Недопустимого маркере предположил бы, что эта ошибка относится к этой строке кода, расположенной в ObjectLayer.cs

partial void OnIDChanged();

ОДНАКО, если эти 3 файла включены в новый проект VS2010 и скомпилированы через этот компилятор, они работают нормально .... эта ошибка происходит только с компилятором CodeDom ... у него есть проблема с "partial void ».

Я нашел проблему очень похожее на это здесь http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/

Однако это исправление не работает, потому что я использую CodeDOM компилятор не VS компилятор ....

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

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

ответ

1

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

Это по-прежнему очень странно по моему мнению, но в .Net 3.5 компилятор CodeDom от DEFAULT хочет использовать компилятор .Net 2 csc.exe .... это вызывало конфликты с моими файлами cs.

ВЫ ДОЛЖНЫ УКАЗАТЬ Compiler ВЕРСИЯ

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

Это одна подкладке решить все мои проблемы.

+0

У меня была аналогичная проблема с компилятором CodeDom, который бросал ошибки, бросая строку в структуру, которая имела неявное преобразование. string to Nullable отбросил ошибки, но строка someStruct работала нормально. Сообщить о компиляторе dom для использования v3.5. –