bbr*_*127 5 c# asp.net entity-framework-4
我们有一个Entity Framework项目,其中包含使用.NET 4和VS2010设置的几个模型.然后我们有几个项目需要使用这个实体项目.我们成功地将EF项目编译为DLL.我们还成功地将EF dll参考添加到多个项目中,这些项目运行良好.
问题是现在我们有几个程序(ASP.NET和控制台应用程序)引用这个EF dll并且dll在本地为每个调用程序复制,当我们对EF dll进行更改时,我们必须进入每个和每个项目,并用新版本替换EF dll.
我已经做了很多搜索在多个项目中共享库甚至EF项目.虽然我找到了几个,但我似乎无法找到一个很好的例子,我可以为我的情况工作,或者不是那么老,以至于无关紧要.
这是我遇到的一般问题.为了更好地了解我遇到的问题,我将重点关注一个特定的项目.这是Intranet中的ASP.NET webform项目.如果我们添加EF dll引用并允许项目在本地复制dll,则EF可以很好地工作.但是,因为我们有多个项目,所以我们现在需要尝试将EF dll集中在可由多个进程共享的地方.我不是试图设置它,以便跨多个服务器访问一个EF dll.如有必要,我很乐意在各个服务器上安装DLL的副本.
我的愿望是在每个服务器上创建一个"公共库"目录,简化示例"C:\ OurLibraries".然后我们将或者EF dll(以及稍后可能的其他人)放入此文件夹,并允许各种程序/进程访问EF dll的公共副本.我已确保已从Intranet项目中删除了EF dll的"本地副本",并添加了对"C:\ OurLibraries\OurEF.dll"文件的引用.一切都很好,Intranet项目工作正常,直到它尝试显示一个引用EF的页面,然后显示一条错误消息:
"无法加载类型'EntityNS.ProductDBEntity'."
如果我在引用中打开"本地副本",则Intranet站点将再次正常工作.我似乎无法找到允许我分享EF dll的魔法设置.
我根据各种帖子尝试了以下内容,但没有成功:
签署程序集并添加到GAC.遇到过与"C:\ OurLibraries"相同的问题
将"C:\ OurLibraries"目录添加到PATH环境变量中.
在我的intranet web.config文件中更改了EF的连接字符串,以从字符串中删除"OR":/Ecomedate.csdl |res:///Ecomedate.ssdl|res:///Ecomedate.msl;provider=System ...到;提供者=系统......
(基于这篇文章:跨项目共享实体框架对象?)
我花了很多时间研究这个并搜索论坛和帖子.我知道必须有一种方法来做这个,否则代码重用和DLL共享似乎没用,所以任何你可以建议的帮助将不胜感激.
以下是我所做的额外努力以及对迄今为止的一些帖子的回应.
这也是我到目前为止在GAC中所经历的. - 在安装了VS2010的计算机上,gacutil位于C:\ Program Files\Microsoft SDK ...以及论坛上的问题"gacutil在哪里"的一般基调是gacutil现在被认为是开发工具而不是意图用于生产环境.Gacutil不是Server 2008或.Net 4框架的一部分,因此有几个关于如何部署和处理GAC dll的建议
- 首先,旧的安装方式,使用gacutil,但通过使用psexec复制并调用生产服务器上的gacutil.我可以让psexec从本地开发盒运行gacutil到prod服务器并获得返回代码0,成功,但是我找不到实际查看它安装在生产服务器上的方法,因为没有gacutil在prod服务器上,我不能使用像gacutil/l DataEntity.dll这样的东西来查看已安装的dll的信息...如果它甚至安装正确.
- 我尝试将gacutil.exe和gacutil.exe.config文件复制到生产服务器以尝试从那里运行.当程序运行并提供gacutil的版本号时,它不响应任何命令行开关,如gacutil.exe/i DataEntity.dll或gacutil.exe/l DataEntity.它只是再次显示gacutil版本信息并停止.
- 有人在论坛上建议在prod机器上安装Microsoft SDK.虽然我可能不得不考虑到目前为止由于缺乏成功,但我真的不喜欢在我的生产环境中安装SDK的想法.
- 我试图查找远程GAC管理器等工具来查看和管理,但该开源项目的最后一次开发是2008年,所以当我尝试使用它来查看GAC时,它希望向我展示c:\ Windows \程序集gac dll,但.NET 4现在使用C:\ windows\Microsoft.NET\assembly来存储GAC dll,所以我似乎可以找到任何方法来查看或维护远程生产服务器的gac上的DLL.如果我在命令提示符下的c:\ windows下运行dir DataEntity.dll/s命令,我会发现嵌入在C:\ Windows\Microsoft.NET\assembly\GAC_MSIL目录中的dll,但如果我试着查看通过C:\ Windows\Microsoft.NET\assembly\GAC_MSIL中的资源管理器文件,我看不到dll,所以我找不到允许我在C:\ Windows\Microsoft中管理(安装,列出,卸载)DLL的工具服务器2008生产服务器上的.NET\assembly\GAC_MSIL.
- 有人建议通过拖放将dll安装到gac中.我正在尝试自动化我们的部署过程,因此不得不手动拖放并没有多大意义.复制到C:\ Windows\Microsoft.NET\assembly\GAC_MSIL目录也可以吗?我已经尝试过了,但是因为我找不到一个能让我看到已安装/注册的DLL的工具,我无法判断它是否有效.
- 另一个建议是创建一个只安装到GAC的安装程序.我试过这个方法并遇到了几个问题.首先,这是一个非常手动的过程.我无法弄清楚如何从GAC卸载旧的DLL然后在gac中安装新版本的DLL; 它一直坚持我先卸载以前的安装.其次,当我尝试卸载dll时,它一直说它正在被另一个应用程序使用.我尝试重新启动然后卸载它,但没有去.我终于想通了它是IIS,不得不关闭IIS,卸载,重启,安装,然后重启IIS.这是一个痛苦,但尝试和自动化.
似乎应该有一种更好的方法将dll部署到生产环境到共享目录中.我只是想尝试将DataEntity.dll放在ac:\ MyLibraries目录中,让进程访问DLL的一个副本.微软用C:\ Program Files\Common Files做到了,所以它应该是可能的,但我现在花了几天时间试图找到一种可以大大减少GAC或安装程序选项所带来的维护工作的方法,减少重复dll的数量,并且如果允许"在本地复制",则避免忽略替换dll.
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |