Ошибка 85 Аргумент 1: не может конвертировать из «System.reflection.constructorInfo» на «MONO.CECIL.TYPEREMENT»
Вопрос
В настоящее время я пытаюсь построить Gendarme 2.10, используя Visual Studio 2010. Вот некоторые из ошибок, которые я получаю:
Error 85 Argument 1: cannot convert from 'System.Reflection.ConstructorInfo' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\external\cecil\Test\Mono.Cecil.Tests\CustomAttributesTests.cs 359 45 Mono.Cecil.Tests
Error 12 Argument 1: cannot convert from 'System.Reflection.FieldInfo' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\external\cecil\Test\Mono.Cecil.Tests\ImportReflectionTests.cs 103 45 Mono.Cecil.Tests
Error 24 Argument 1: cannot convert from 'System.Reflection.FieldInfo' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\external\cecil\Test\Mono.Cecil.Tests\ImportReflectionTests.cs 149 44 Mono.Cecil.Tests
Error 46 Argument 1: cannot convert from 'System.Reflection.FieldInfo' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\external\cecil\Test\Mono.Cecil.Tests\ImportReflectionTests.cs 198 44 Mono.Cecil.Tests
Error 60 Argument 1: cannot convert from 'System.Reflection.FieldInfo' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\external\cecil\Test\Mono.Cecil.Tests\ImportReflectionTests.cs 276 39 Mono.Cecil.Tests
Error 14 Argument 1: cannot convert from 'System.Reflection.MethodInfo' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\external\cecil\Test\Mono.Cecil.Tests\ImportReflectionTests.cs 117 43 Mono.Cecil.Tests
.
После удаления всех проектов тестов, вот ошибки, которые я получаю:
Error 4 Argument 1: cannot convert from 'System.Type' to 'Mono.Cecil.TypeReference' C:\Tools\mono-tools\gendarme\framework\Gendarme.Framework.Helpers\PrimitiveReferences.cs 53 25 Gendarme.Framework
Error 3 The best overloaded method match for 'Mono.Cecil.ModuleDefinition.Import(Mono.Cecil.TypeReference)' has some invalid arguments C:\Tools\mono-tools\gendarme\framework\Gendarme.Framework.Helpers\PrimitiveReferences.cs 53 10 Gendarme.Framework
.
Вот код, который вышеупомянутые ошибки относятся:
static TypeReference GetReference (Type type, IMetadataTokenProvider metadata)
{
ModuleDefinition module = metadata.GetAssembly ().MainModule;
TypeReference tr;
if (!module.TryGetTypeReference (type.FullName, out tr))
tr = module.Import (type);
return tr;
}
.
У кого-нибудь есть какие-либо предложения?TIA.
Роджер
Решение
Вот временное решение, которое я собрал вместе.Пожалуйста, не стесняйтесь комментировать:
static TypeReference GetReference (Type type, IMetadataTokenProvider metadata)
{
ModuleDefinition module = metadata.GetAssembly ().MainModule;
ModuleKind kind = ModuleKind.Windows;
ModuleDefinition definition = ModuleDefinition.CreateModule(module.Name, kind);
Version version = new Version(1, 0);
AssemblyNameDefinition nameDefinition = new AssemblyNameDefinition(module.Name, version);
AssemblyDefinition assemblyDefinition = AssemblyDefinition.CreateAssembly(nameDefinition, definition.Name, kind);
assemblyDefinition = AssemblyDefinition.ReadAssembly(module.Name);
definition.Assembly = assemblyDefinition;
IMetadataScope scope = new ModuleReference(module.Name);
scope.MetadataToken = assemblyDefinition.MetadataToken;
TypeReference tr = new TypeReference(type.Namespace, type.Name, definition, scope);
//if (!module.TryGetTypeReference(type.FullName, out tr))
// tr = module.Import(type);
return tr;
}
. Не связан с StackOverflow