access的配置问题

Topics: Developer Forum, User Forum
Oct 22, 2010 at 4:56 PM

网站在本地测试和win2k8上运行一直正常,现在换win2k3服务器出现异常:
 
异常信息:
    异常类型: TargetInvocationException
    异常消息: 调用的目标发生了异常。
   在 System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   在 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   在 System.Activator.CreateInstance(Type type, Boolean nonPublic)
   在 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)

“Lephone.Data.Common.MemoryAssembly”的类型初始值设定项引发异常。
   在 Lephone.Data.Common.DynamicObjectBuilder.GenerateType(Type sourceType)
   在 Lephone.Data.Common.AssemblyHandler.DynamicAssemblyHandler.GetImplementedType(Type sourceType)
   在 Lephone.Data.Common.AssemblyHandler.GetImplType(Type sourceType)
   在 Lephone.Data.Common.ObjectInfo.CheckKey(Type dbObjectType)
   在 Lephone.Util.FlyweightBase`2.GetInst(TKey tk)
   在 Lephone.Data.DbEntry.From[T]()
   在 Lephone.Data.Definition.DbObjectModelBase`2.Find(Expression`1 condition)
   在 Web.Areas.CN.Controllers.Base..ctor()
   在 Web.Areas.CN.Controllers.HomeController..ctor()

无法为 StrongNameKeyPair 获得公钥。
   在 System.Reflection.StrongNameKeyPair.ComputePublicKey()
   在 System.Reflection.StrongNameKeyPair.get_PublicKey()
   在 System.Reflection.Emit.AssemblyBuilder..ctor(AppDomain domain, AssemblyName name, AssemblyBuilderAccess access, String dir, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, StackCrawlMark& stackMark, IEnumerable`1 unsafeAssemblyAttributes, SecurityContextSource securityContextSource)
   在 System.Reflection.Emit.AssemblyBuilder.InternalDefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, String dir, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, StackCrawlMark& stackMark, IEnumerable`1 unsafeAssemblyAttributes, SecurityContextSource securityContextSource)
   在 System.AppDomain.InternalDefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, String dir, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, StackCrawlMark& stackMark, IEnumerable`1 assemblyAttributes, SecurityContextSource securityContextSource)
   在 System.AppDomain.DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access)
   在 Lephone.Data.Common.MemoryAssembly..ctor(String AssemblyName)
   在 Lephone.Data.Common.MemoryAssembly..ctor()
   在 Lephone.Data.Common.MemoryAssembly..cctor()

--------------------------------------------------------------------------

已经修改过AssemblyInfo.cs,在配置文件里加入

    <Lephone.Settings>
        <add key="ObjectHandlerType" value="Reflection" />
        <add key="DataBase" value="@Access :@Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Data.mdb" />
    </Lephone.Settings>

但问题依旧,设置权限也试过,依然不能解决。

Coordinator
Oct 23, 2010 at 12:20 PM

http://dbentry.codeplex.com/wikipage?title=Save%20dynamic%20assembly

Oct 24, 2010 at 5:45 AM

请问用上面的方法,是不是必须将model分离出独立的项目?

Oct 24, 2010 at 7:49 AM

另外lephone.codegen dll web.models.dll


System.BadImageFormatException: 生成此程序集的运行时比当前加载的运行时新,无法加
载此程序集。 (异常来自 HRESULT:0x8013101B)
   在 System.Reflection.Assembly.nLoadFile(String path, Evidence evidence)
   在 System.Reflection.Assembly.LoadFile(String path)
   在 Lephone.CodeGen.Helper.EnumTypes(String fileName, Boolean needStrongName,
CallbackReturnHandler`2 callback)
   在 Lephone.CodeGen.Program.GenerateAssembly(String fileName)
   在 Lephone.CodeGen.Program.Process(String[] args)
   在 Lephone.CodeGen.Program.Main(String[] args)

网站下载的lephone.codegen不支持.net 4.0的?

Coordinator
Oct 24, 2010 at 8:16 AM

1.不必分离。

2.bin不支持4.0,可以自己编译。

Oct 24, 2010 at 9:24 AM

错误    1    命令“if "Release" == "Release" goto Release
goto End

:Release
copy *.dll ..\..\..\..\bin\

:End
”已退出,代码为 1。    Lephone.Data

 

奇怪了,vs2010下编译不通过

Coordinator
Oct 24, 2010 at 10:44 AM

确认bin目录已存在再编译。

Oct 24, 2010 at 11:44 AM

bin目录存在的,原来是在“后期生成事件命令行”中删除了那些语句就行了。不过新问题又出来了,

Lephone.CodeGen dll web.dll


Lephone.Data.DataException: The assembly should have strong name.
   在 Lephone.CodeGen.Helper.EnumTypes(String fileName, Boolean needStrongName,
CallbackReturnHandler`2 callback)
   在 Lephone.CodeGen.Program.GenerateAssembly(String fileName)
   在 Lephone.CodeGen.Program.Process(String[] args)
   在 Lephone.CodeGen.Program.Main(String[] args)

郁闷了几天还是配置不好,现在在装一台win2003,试验一下是不是2003的配置问题~~~

Coordinator
Oct 24, 2010 at 1:43 PM

The assembly should have strong name.......

Oct 24, 2010 at 3:29 PM

程序集应该拥有一个有效的强名称?不明白该怎样解决。另外我刚才在虚拟机装了个2k3,程序运行正常,应该是系统配置问题,可惜找不到原因

Oct 24, 2010 at 3:57 PM

问题解决了,重新设置一下DSS权限即可,另外RSA目录也要设置的,谢谢lifeng兄的支持,另外建议一下,tools能升级到支持.net 4.0就好了,期待dbentry有更好的发展

Coordinator
Oct 25, 2010 at 1:57 AM

web.dll 在使用动态程序集的时候,无需强名称签名,但是静态化的时候,必须强名称签名。

最新的源代码已经完全迁移到只支持4.0了,这也是当前Release版本号是3.9的原因。