我有一个针对框架3.5的VB.NET项目,它引用了从数据库生成的编译枚举的动态DLL。我的项目在Visual Studio 2012中编译和运行。我开始将我的解决方案升级到Visual Studio 2015,并在我尝试执行此项目时遇到了一堆错误。
我得到的关于每个枚举的两个错误是
查看枚举元数据的定义(我可以在2015年但不能在2012年完成)我看到它被定义为
Enum EnumName as Object
Field1
Field2
End Enum
正如你可以看到它附加的As Object,这是我以前从未见过的。但这解释了operator = error,因为如果它是一个对象而不是你必须定义一个重载的Equals运算符。
我只是看到2015年是否有人有任何见解或知道会导致此问题的任何事情。我尝试创建一个新项目,导入.DLL只是为了看看它们是否在VS 2015中完全有效。它们在C#中引用但在VB.NET中没有引用。 .DLL是用VB.NET编写和编译的。小号
暂时我仍然可以使用2012,但是希望将来升级到2015,而不必重写一堆东西。
编辑:
以下是用于创建枚举.DLL的(简化)代码。正在使用Enum名称读取xml,并使用sql查询生成枚举。
Dim myEnumBuilder As Emit.EnumBuilder
Dim myAppDomain as AppDomain
Dim myModuleBuilder As ModuleBuilder
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = EnumDll.Name
' Create a dynamic assembly.
myAssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Save, msOutputDirectoryPath)
' Create a dynamic module.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("Library." & EnumDll.Name, EnumDll.Name & ".dll")
' Creating a dynamic Enum.
myEnumBuilder = myModuleBuilder.DefineEnum(EnumDll.Name & "." & EnumName, TypeAttributes.Public, GetType(Int32))
Dim myFieldBuilder As FieldBuilder = myEnumBuilder.DefineLiteral(StrEnum, CInt(oReader(0)))
myEnumBuilder.CreateType()
myAssemblyBuilder.Save(EnumDll.Name & ".dll") 'save the dll