偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺析Visual Studio中程序集簽名的不足之處

開(kāi)發(fā) 后端
在這里我們將講述的是Visual Studio中程序集簽名的不足之處,希望能對(duì)大家的日常工作有所幫助。

由于我們的項(xiàng)目底層使用到一個(gè)通過(guò)LogicalCallContext實(shí)現(xiàn)的上下文數(shù)據(jù)管理框架,導(dǎo)致所有的Unit Test不能正常運(yùn)行。具體的現(xiàn)象在《只在UnitTest和WebHost中的出現(xiàn)的關(guān)于LogicalCallContext的嚴(yán)重問(wèn)題》有過(guò)詳細(xì)的介紹。解決的方案就是對(duì)相關(guān)的程序集進(jìn)行強(qiáng)簽名,并加到GAC中,是Unit Test能夠識(shí)別基于LogicalCallContext項(xiàng)目的類(lèi)型。有了Visual Studio這個(gè)強(qiáng)大的IDE,程序集的簽名工作很好實(shí)現(xiàn)——僅僅需要在Project的Properties對(duì)象框的Signing Tab中指定一個(gè)Key File就可以了。但是,Visual Studio做得不夠好。

一、Visual Studio會(huì)自作主張地在項(xiàng)目根目錄下復(fù)制一個(gè)Key File

image 

舉個(gè)例子,假設(shè)一個(gè)解決方案中具有兩個(gè)項(xiàng)目:Lib1和Lib2。現(xiàn)在我們需要使用“同一個(gè)Key File”對(duì)Lib1和Lib2進(jìn)行簽名,Lib1、Lib2和Key File(Key.snk) 對(duì)應(yīng)的目錄結(jié)構(gòu)如右圖所示:Key.snk和Lib1和Lib2處在相同的目錄下面。

image

現(xiàn)在我們右擊Lib1項(xiàng)目文件,選擇Properties菜單項(xiàng)進(jìn)行項(xiàng)目屬性對(duì)話框,選擇Signing Tab頁(yè)進(jìn)行程序集簽名相關(guān)設(shè)置。選中Sign the assembly復(fù)選框,在下拉框中選擇<Browse>選項(xiàng),并在彈出的文件選擇對(duì)話框中我們的Key File:Key.snk。

image 

但是當(dāng)你選中Key.snk這個(gè)文件的時(shí)候,Visual Studio并不會(huì)用將這個(gè)文件作為對(duì)本程序集進(jìn)行簽名的Key File,而是會(huì)自作主張地將該文件拷貝到Lib1所在的根目錄下。最終被用于程序集簽名的不是我們希望的那個(gè)File Key,而是該File Key的復(fù)制品(如右圖所示)。

我不太明白微軟如此設(shè)計(jì)具有怎樣的考慮,但是對(duì)于我們目前的項(xiàng)目來(lái)說(shuō),我是無(wú)法接受的。上面的例子中只有兩個(gè)需要簽名的項(xiàng)目,就需要維護(hù)兩個(gè)Key File,但是我們的項(xiàng)目中有數(shù)十個(gè)項(xiàng)目,就意味著需要維護(hù)數(shù)十個(gè)不同的Key File,從維護(hù)的角度講,如果有朝一日我需要更換另一個(gè)Key File, 我就需要為每個(gè)項(xiàng)目進(jìn)行更新。

那么我們有沒(méi)有辦法讓所有項(xiàng)目采用同一個(gè)Key File進(jìn)行簽名呢?當(dāng)然有,不然我也不會(huì)寫(xiě)這篇文章了??偟膩?lái)說(shuō),我們?nèi)N不同的解決方案。

解決方案1:通過(guò)AssemblyKeyFileAttribute特性指定Key File

AssemblyKeyFileAttribute特性定義在System.Reflection命名空間下,專(zhuān)門(mén)用于指定在對(duì)項(xiàng)目進(jìn)行強(qiáng)簽名時(shí)采用的Key File。所以我們只需要在AssemblyInfo.cs中(也可以在其它地方)指定我們采用的Key File文件路徑即可。通過(guò)下面的代碼,我們指定我們對(duì)Lib1項(xiàng)目指定了我真正期望用于進(jìn)行簽名的那個(gè)Key File。

   1: [assembly: AssemblyVersion("1.0.0.0")]
   2: [assembly: AssemblyFileVersion("1.0.0.0")]
   3: [assembly: AssemblyKeyFile("..\\Key.snk")]

image 

但是,這并不是一種推薦的Key File指定方式。當(dāng)你添加了AssemblyKeyFileAttribute特性的時(shí)候,Visual Studio會(huì)有如下一個(gè)警告:“Use command line option '/keyfile' or appropriate project settings instead of 'AssemblyKeyFile'”。提示你采用另外兩種方案:命令行或者項(xiàng)目設(shè)置。

解決方案2:通過(guò)命令行進(jìn)行強(qiáng)簽名

相信大家對(duì)通過(guò)命令行對(duì)程序集進(jìn)行強(qiáng)簽名的方式都不會(huì)感到陌生。這種方式就是直接使用.NET Framework為我們提供的強(qiáng)名稱(chēng)工具(SN.exe: Strong Name Tool)。關(guān)于SN.exe相關(guān)參數(shù)設(shè)定可以參考MSDN在線文檔(http://msdn.microsoft.com/en-us/library/k5b5tt23(VS.80).aspx),在這里就不再贅言介紹了。

解決方案3:還是通過(guò)項(xiàng)目設(shè)置(Project Setting)

還是使用文章剛開(kāi)始的那種方式,直接設(shè)置項(xiàng)目關(guān)于簽名(Signing)的相關(guān)屬性。有人會(huì)說(shuō)了,你不是說(shuō)這種方式會(huì)導(dǎo)致Key File的復(fù)制嗎,為何還要使用這種方式。為此,我們需要換一種思維:通過(guò)項(xiàng)目設(shè)置對(duì)象框?qū)?xiàng)目進(jìn)行的所有設(shè)置最終都會(huì)反映在項(xiàng)目文件中(.csproj或者.vbproj)。雖然通過(guò)Visual Studio不能實(shí)現(xiàn)我們的目標(biāo),如果我們直接更新項(xiàng)目文件呢?實(shí)踐證明,這種方案時(shí)可行的。為此,我們通過(guò)NotePad打開(kāi)Lib1的項(xiàng)目文件Lib1.csproj,在<ProjectGroup>元素中加上一個(gè)<AssemblyOriginatorKeyFile>元素,并指定Key File的路徑(..\Key.snk)即可。

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">     
  3. ......    
  4.  <PropertyGroup>    
  5.  <SignAssembly>true</SignAssembly>   
  6. </PropertyGroup>    
  7. <PropertyGroup>    
  8. <AssemblyOriginatorKeyFile>..\Key.snk</AssemblyOriginatorKeyFile>     
  9.  </PropertyGroup>     
  10.  </Project> 

原文標(biāo)題:Visual Studio對(duì)程序集簽名時(shí)一個(gè)很不好用的地方

鏈接:http://www.cnblogs.com/artech/archive/2010/09/10/1823689.html

【編輯推薦】

  1. Visual Studio 2010中Xaml開(kāi)發(fā)格式設(shè)置技巧
  2. Visual Studio 2010中手動(dòng)添加圖片文件
  3. 使用Visual Studio 2010統(tǒng)一管理數(shù)據(jù)庫(kù)對(duì)象
  4. Visual Studio 2010 TFS探索之旅
  5. Visual Studio 2010更改顏色背景的方法
責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2013-10-10 13:57:27

VMwareVMware Mira

2013-05-22 10:37:57

Windows SerRDS

2009-12-31 09:51:16

無(wú)線Mesh接入技術(shù)

2010-07-12 15:16:04

SQL Server

2013-06-18 16:58:12

HDFS分布式文件系統(tǒng)

2012-11-14 11:03:33

2010-07-06 14:53:09

UML業(yè)務(wù)流程

2011-03-22 14:01:47

關(guān)系數(shù)據(jù)模型

2013-11-05 11:14:47

Windows 8.1

2010-01-25 16:58:15

C++程序

2010-03-26 09:48:43

Python嵌入C++

2009-12-01 11:38:54

蘋(píng)果應(yīng)用軟件商店

2021-09-14 14:44:30

CISA勒索軟件RRA

2009-11-02 14:16:43

Visual Stud

2010-02-23 16:24:47

Visual Stud

2010-01-25 09:17:01

Visual Stud

2009-09-27 08:57:29

Visual Stud

2009-11-02 14:06:59

Visual Stud

2009-08-05 11:02:30

Visual Stud

2009-09-04 10:10:33

Visual Basi
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)