提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2010-09-14 13:40:43.000|阅读 835 次
概述:由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。解决的方案就是对相关的程序集进行强签名,并加到GAC中,是Unit Test能够识别基于LogicalCallContext项目的类型。有了Visual Studio这个强大的IDE,程序集的签名工作很好实现——仅仅需要在Project的Properties对象框的Signing Tab中指定一个Key File就可以了。但是,Visual Studio做得不够好。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。解决的方案就是对相关的程序集进行强签名,并加到GAC中,是Unit Test能够识别基于LogicalCallContext项目的类型。有了Visual Studio这个强大的IDE,程序集的签名工作很好实现——仅仅需要在Project的Properties对象框的Signing Tab中指定一个Key File就可以了。但是,Visual Studio做得不够好。
一、Visual Studio会自作主张地在项目根目录下复制一个Key File
举个例子,假设一个解决方案中具有两个项目:Lib1和Lib2。现在我们需要使用“同一个Key File”对Lib1和Lib2进行签名,Lib1、Lib2和Key File(Key.snk) 对应的目录结构如右图所示:Key.snk和Lib1和Lib2处在相同的目录下面。
现在我们右击Lib1项目文件,选择Properties菜单项进行项目属性对话框,选择Signing Tab页进行程序集签名相关设置。选中Sign the assembly复选框,在下拉框中选择<Browse>选项,并在弹出的文件选择对话框中我们的Key File:Key.snk。
但是当你选中Key.snk这个文件的时候,Visual Studio并不会用将这个文件作为对本程序集进行签名的Key File,而是会自作主张地将该文件拷贝到Lib1所在的根目录下。最终被用于程序集签名的不是我们希望的那个File Key,而是该File Key的复制品(如右图所示)。
我不太明白微软如此设计具有怎样的考虑,但是对于我们目前的项目来说,我是无法接受的。上面的例子中只有两个需要签名的项目,就需要维护两个Key File,但是我们的项目中有数十个项目,就意味着需要维护数十个不同的Key File,从维护的角度讲,如果有朝一日我需要更换另一个Key File, 我就需要为每个项目进行更新。
那么我们有没有办法让所有项目采用同一个Key File进行签名呢?当然有,不然我也不会写这篇文章了。总的来说,我们三种不同的解决方案。
解决方案1:通过AssemblyKeyFileAttribute特性指定Key File
AssemblyKeyFileAttribute特性定义在System.Reflection命名空间下,专门用于指定在对项目进行强签名时采用的Key File。所以我们只需要在AssemblyInfo.cs中(也可以在其它地方)指定我们采用的Key File文件路径即可。通过下面的代码,我们指定我们对Lib1项目指定了我真正期望用于进行签名的那个Key File。
1: [assembly: AssemblyVersion("1.0.0.0")]
2: [assembly: AssemblyFileVersion("1.0.0.0")]
3: [assembly: AssemblyKeyFile("..\\Key.snk")]
但是,这并不是一种推荐的Key File指定方式。当你添加了AssemblyKeyFileAttribute特性的时候,Visual Studio会有如下一个警告:“Use command line option '/keyfile' or appropriate project settings instead of 'AssemblyKeyFile'”。提示你采用另外两种方案:命令行或者项目设置。
解决方案2:通过命令行进行强签名
相信大家对通过命令行对程序集进行强签名的方式都不会感到陌生。这种方式就是直接使用.NET Framework为我们提供的强名称工具(SN.exe: Strong Name Tool)。关于SN.exe相关参数设定可以参考MSDN在线文档(//msdn.microsoft.com/en-us/library/k5b5tt23(VS.80).aspx),在这里就不再赘言介绍了。
解决方案3:还是通过项目设置(Project Setting)
还是使用文章刚开始的那种方式,直接设置项目关于签名(Signing)的相关属性。有人会说了,你不是说这种方式会导致Key File的复制吗,为何还要使用这种方式。为此,我们需要换一种思维:通过项目设置对象框对项目进行的所有设置最终都会反映在项目文件中(.csproj或者.vbproj)。虽然通过Visual Studio不能实现我们的目标,如果我们直接更新项目文件呢?实践证明,这种方案时可行的。为此,我们通过NotePad打开Lib1的项目文件Lib1.csproj,在<ProjectGroup>元素中加上一个<AssemblyOriginatorKeyFile>元素,并指定Key File的路径(..\Key.snk)即可。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
xmlns="//schemas.microsoft.com/developer/msbuild/2003">
......
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>..\Key.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
</Project>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢