程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Visual Studio DSL 入門14---用Wix制作安裝程序

Visual Studio DSL 入門14---用Wix制作安裝程序

編輯:關於.NET

我們到現在為止已經對Vs.net dsl的基礎知識進行了介紹,並且一步一步的完成了我們的狀態機設計器的設計,在上一節結合T4模板生成了代碼.但是我們一直還是在調試的項目中來做的, 怎麼能夠讓我們做的這個狀態機設計器能夠提供給其它人使用呢,在這一節,我們就來做一個安裝程序,這樣在只安裝了VS.NET的機器上,不用安裝SDK就可以使用我們的設計器了.

VS.NET DSL專門提供了針對DSL的安裝項目,我們直接基於這個項目來制作我們的安裝程序:

1.首先,向我們的解決方案中添加一個Dsl 安裝項目,從項目類型中選擇Extensibility—Domain Specific Language Setup:

2. 我們可以看到在生成的項目中, 還是由很多tt文件, 其實dsl的安裝是基於開源項目wix,不過在一般情況下,我們不需要手動去修改wix文件,不過如果一旦有特殊的需求,現有的這種機制是很難滿足的. 我們來介紹一下這種安裝機制:

當我們向這個解決方案中添加DSL setup項目時,它會自動的尋找Dsl項目和DslPackage項目,並自動添加對這兩個項目的引用,然後根據這兩個項目中生成自己的元數據文件 InstallerDefinition.dslsetup,我們來看一下這個文件:

<installerDefinition xmlns="http://schemas.microsoft.com/VisualStudio/2005/DslTools/InstallerDefinitionModel" 

productUrl="InsertProductUrlHere"

defaultDirectoryName="LanguageSm"

productVersion="1.0.0"

requiresCSharp="true"

requiresVisualBasic="true"

productCode="326b807c-a6da-43ac-9d29-f75cf060622a"

upgradeCode="cc04b782-48c3-49c5-a60e-eda39258bfaa"

localeId="1033">

<dslPackage name="LanguageSm" project="DslPackage" assemblyPath="Company.LanguageSm.DslPackage.dll" registryRoot="SOFTWARE\Microsoft\VisualStudio\9.0">

<fileExtensions>

<fileExtension name="mydsl5" extension="mydsl5" descriptionKey="FileDescription" hasIcon="true" iconId="0"/>

</fileExtensions>

<supportingAssemblies>

<supportingAssembly name="Dsl" project="Dsl" assemblyPath="Company.LanguageSm.Dsl.dll"/>

</supportingAssemblies>

</dslPackage>

<licenseAgreement filePath="Files\EULA.rtf" isEmbedded="true" />

<supportingFiles>

<supportingFile name="Readme" filePath="Files\Readme.htm" installShortcut="true" shortcutIconPath="Resources\ReadmeShortcut.ico" openAfterInstall="true" />

</supportingFiles>

<vsItemTemplates>

<vsItemTemplate localeId="1033" targetDirectories="CSharp" project="DslPackage" templatePath="CSharp\1033\LanguageSm.zip"/>

<vsItemTemplate localeId="1033" targetDirectories="VisualBasic" project="DslPackage" templatePath="VisualBasic\1033\LanguageSm.zip"/>

</vsItemTemplates>

<dslSchemas>

<dslSchema project="Dsl" filePath="GeneratedCode\LanguageSmSchema.xsd"/>

</dslSchemas>

</installerDefinition>

(1).根結點installerDefinition下面是全局的定義,包括產品URL,目錄名稱,版本,是否在安裝需要vs.net安裝c#或者是 BisualBasic等,在這裡我們注意需要把requireVisualBasic設置為false.

(2).dslPackge結點是對我們的dsl的一些注冊信息,這些信息都來自於我們的DslDefinition.dsl文件,不過我們這裡可以對這些信息進行一些修改.

(3).licenseAgreement  許可協議文件,這會在安裝過程中顯示出來.

(4).supportingFiles, 需要復制到安裝目錄的文件列表

(5).vsItemTemplates   項目項模板,是在項目中新增項的時候的,而不是說我們生成代碼的tt模板,也不是說新增項目的模板 , localeId是區域id,你可以根據你的vs.net語言版本改成2052

下面再來看一下生成的其它幾個文件:

Main.wxs       這是wix的主文件,控制整個安裝流程,包括對以下幾個部分的引用.

Files.wxs       需要在安裝目錄創建的目錄結構和文件  包括dll和附屬文件

Registry.wxs    注冊項信息,需要寫入注冊表的項

UI.wxs          安裝界面

string.wxs     被其它部分使用的語言的鍵值對,如果需要多語言支持,可以再添加對應語言的文件,比如string_zh-cn.wxs

除了string.wxs文件,其它的幾個文件都是由tt文件生成的,不要手動去修改,即使修改了重新轉換模板時也會被覆蓋掉.

3.我們暫時不需要做一些高級功能,現在先重新生成模板,然後編譯整個安裝項目:

D:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Wix\candle.exe -dConfiguration=Debug -out obj\Debug\ -w0 -v Files.wxs Registry.wxs Main.wxs UI.wxs

D:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Wix\light.exe -b F:\NET\Projects\LanguageSm\LanguageSmSetup -loc Strings.wxl -out bin\Debug\LanguageSm.msi -sa -w0 -v obj\Debug\Files.wixobj obj\Debug\Registry.wixobj obj\Debug\Main.wixobj obj\Debug\UI.wixobj

可以看到其實是調用了sdk中附帶的wix的candle命令來生成. 編譯完成後,在setup項目下的debug目錄下面,可以找到生成的exe文件,我們點擊安裝:

 

接下來就是許可協議rtf文件的內容,同意後點下一步:

這一步選擇我們的安裝目錄:

 

選擇完目錄後,直接下一步,直接到完成安裝,我們新建一個類庫項目,添加項時就會看到我們的LanguageSm:

添加後我們就可以和我們調試項目的時候一樣進行狀態機的設計了.不過生成代碼的功能暫時還沒有加進來.

4.不過當你把這個生成的安裝文件給沒有安裝過Visual stuido.net SDK的機器安裝後,你會發現,沒有作用,要讓dsl能夠直接在vs.net上安裝,你還必須要有自己的PLK(Package Load Key).

(1)登陸vsx的網站http://msdn.microsoft.com/zh-cn/vsx/cc655795(en-us).aspx,左下角的就是plk的注冊信息,這些信息來源於你的DslDefinition.dsl的根結點的屬性:

(2)填寫完這些信息完,點擊生成PLK,會生成一串的字母.然後打開DslPackage項目下面的VSPackage.resx文件,添加一個鍵為1的字符串資源,值就是生成的PLK GUID.

(3)打開DslPackage項目GeneratedCode文件夾下面的Package.tt文件,將下面這句用來加載PLK的屬性標記的注釋去掉:

/// [VSShell::ProvideLoadKey("Standard", Constants.ProductVersion, Constants.ProductName, Constants.CompanyName, 1)]

(4)保存文件,重新轉換模板,再編譯dslsetup項目生成exe文件,這次就可以直接在未安裝sdk的機器上安裝使用了.

5. 即使你可能覺得Dsl setup安裝項目還是很強大的,不過我還是需要說明以下幾點:

(1)使用wix結合t4制作dsl安裝項目,雖然簡單,但是有失靈活性,如果你想擴展在使用現有的這種方式會有些麻煩除非你脫離開T4,就直接使用wix來完成.

(2)使用wix,就是把注冊表操作,復制文件操作,多語言處理,安裝界面和流程處理等通過它特有的xml和擴展機制來實現,你完全可以不用這種機制,不用dsl setup項目,而使用自己的安裝方式.  比如直接新建普通的安裝項目或者是使用installshiled.

(3)很高興的看到,在vs 2010中的關於dsl的安裝已經不使用wix了,而是通過新的擴展管理器來加載.

代碼下載:http://files.cnblogs.com/lonely7345/LanguageSm6.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved