aspnet_compiler.exe находит несколько типов в глобальном псевдониме, но я не могу!

Сегодня унаследовал новый проект, пытаясь избавиться от сотен предупреждений, и остановился на этом. ASP.NET MVC 2, проект framework 4.0, который отлично компилируется в VS2010, но когда процесс сборки переходит к aspnet_compiler.exe, я получаю следующее (вырезано и вставлено из окна вывода):

AfterBuild:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v temp -p C:\data\crecare\CreCare20110403\CreCare.Mvc\\..\CreCare.Mvc 
ASPNETCOMPILER : warning CS1685: The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll'

Ни поиск в обозревателе объектов, ни утомительный просмотр ссылок в проекте по каждой сборке не приводят к множественным определениям. Насколько я могу судить, предыдущая команда не пыталась создавать расширения в предыдущих версиях ASP.NET (я узнал одну причину этой ошибки ); Я думаю, что это нацелено на 4.0 с самого начала.

Это всего лишь предупреждение, и я полагаю, что могу его проигнорировать (вы даже не можете /nowarn с aspnet_compiler.exe, поэтому я должен посмотреть на них) - но это меня неправильно. Любые предложения о том, как выследить это? Должен ли меня беспокоить этот "\..\" в пути к проекту? Я использую 64-битные окна; это не смотреть на х86 и 64 одновременно?

Стоит отметить, что использование обозревателя объектов в VS2010 в решении находит только тот тип в сборке, который находит aspnet_compiler.exe; поиск типа дает только один результат. Ищет ли aspnet_compiler.exe места, которых нет в VS2010?


person bschuth    schedule 26.04.2011    source источник
comment
У меня есть частичный ответ: это использование базы данных объектов db4o. Сборки db4o используют Mono.Cecil.dll; это реализует тип ExtensionAttribute, как определено выше. Mono.Cecil копируется в каталог bin/debug. Если я удалю все Mono.Cecil.dll и запущу aspnet_compiler, предупреждения исчезнут; Хотя я не уверен, что я что-то сломал. Думаю, я обречен смотреть на эти предупреждения.   -  person bschuth    schedule 27.04.2011
comment
Я думаю, что нашел решение. Это действительно дубликат предыдущего вопроса; Я просто не видел этого, потому что базовая ссылка на Mono.Cecil не была мне видна через VS2010; db4o крался в ссылке, а я этого не осознавал. Урок: если вы начинаете получать странные ответы от aspnet_compiler, посмотрите, что попало в вашу папку bin/debug, это может быть причиной вашей проблемы. Чтобы это исчезло, мне нужно перекомпилировать Mono.Cecil с символом NET_4_0 и заменить им все существующие Mono.Cecil.Dll.   -  person bschuth    schedule 27.04.2011


Ответы (1)


Как вы сказали, это из-за Mono.Cecil.

Это предупреждение может стать ошибкой, если у вас есть ссылка на Mono.Cecil.Dll и реализованы методы расширения /, потому что при выполнении компилятор отдает приоритет реализации Mono.Cecil.

Я не понимаю, почему сборки db4o, которые должны быть для .net 4, не учитывают это, но мы можем подтвердить то же самое, поскольку мы рассмотрели ту же проблему.

Пока вы копируете только для вывода Mono.Cecil (мы добавляем ссылку и устанавливаем ее для копирования на вывод) вместо использования обычной ссылки, все работает нормально. Предупреждение раздражает, но, учитывая странную ситуацию с этими сборками на db4o, мы предпочли пока не заниматься сборкой исходников.

person eglasius    schedule 17.05.2011