Xha*_*lie 15 sql-server dll gac spatial
我目前正在努力解决由其Microsoft.SqlServer.Types
及其相关的非托管库引起的部署问题,SqlServerSpatial110.dll
这两者都适用于Microsoft SQL Server 2012.问题很容易解决,只是典型的DLL缺失问题,但我试图决定处理这些依赖关系的完美方法.
首先,我必须声明我不同意手动部署任一库(通常通过将它们复制到项目的输出目录中,或者可疑地将其复制到System32
自身中)的流行观点是正确的.Microsoft为这些文件提供可再发行的MSI安装程序,这些安装程序将这些文件放入系统位置.很明显,他们希望我们依赖于单独安装的可再发行组件,或者作为MSI本身内置的经过试验和测试的依赖机制的一部分.
在发布时,可以从以下网址下载这些可再发行组件的最新版本:http://www.microsoft.com/en-gb/download/details.aspx?id = 43339
因为SqlServerSpatial110.dll
,似乎没有任何问题.MSI安装程序(特定于平台)将文件放入任一Windows\System32
或Windows\SysWOW64
适当的一切,一切都很好.
托管包装器库Microsoft.SqlServer.Types.dll
更令人困惑.
在我看来,该文件被放入全局程序集缓存 - 运行MSI后,在我的机器上,我可以看到它位于,C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types.dll
该文件具有正确的版本和修改日期.
奇怪的是,我无法在Visual Studio的参考浏览器或Windows资源管理器中直接看到它 - 只有我在Mysicsoft的老式文件系统搜索工具中才能看到它.为什么我看不到它?
由于该文件几乎在GAC中,我猜测引用它的项目不应该制作它的本地副本 - 它们应该依赖它在目标系统上.我测试了这个假设并且它有效:
Microsoft.SqlServer.Types.dll
从其位置手动复制C:\Windows\assembly\GAC_MSIL
Copy Local
设置为False
Microsoft.SqlServer.Types.dll
输出中绝对不存在.因此,如果可以在运行时从GAC解析程序集以满足此依赖性,那么为什么在添加引用时它不会显示在引用浏览器中?为什么我必须将其从GAC中复制出来并参考副本?
在我看来,理想的工作流程是这样的:
Microsoft.SqlServer.Types
使用参考浏览器就像任何框架库从GAC.(默认Copy Local
设置为False
.)Microsoft.SqlServer.Types
将从GAC解析(平台不可知),并且将根据流程体系结构从系统位置加载非托管库的相应副本.显然,第3步没有发生.我错过了什么吗?也许我误解了GAC本身 - 这不是第一次.为什么微软这样做了?我能接近理想的工作流程吗?
也许有一种完全不同的方式来管理这种依赖 - 我显然没有想到这一点.如果是这样,它是什么?你怎么处理它?
如果这是一键部署,则转到“项目|属性|发布”选项卡并单击“应用程序文件...”按钮。然后,您应该选择相关文件并确保为“发布状态”值选择“包含(自动)”。原因是 VS 似乎足够聪明,可以确定该文件是否是已知可再发行的一部分,这使您可以选择在安装过程中作为依赖项依赖外部包或自己管理该文件。如果您依赖该软件包,那么最终用户可以通过添加删除程序来卸载,并且您的应用程序将被破坏:/
归档时间: |
|
查看次数: |
17430 次 |
最近记录: |