2012-04-02 202 views
5

我一直使用Wix 3.5和WixVSExtension來爲Visual Studio 2010,Visual C#2010 Express和Visual Web Developer 2010 Express安裝項目項目模板。我現在想要添加對Visual Studio 11 Beta的支持。爲Visual Studio 11註冊加載項,項目模板和項目模板

我添加註冊表搜索和自定義操作,找到VS11安裝文件夾,但是,指定目錄和組件結構的時候,我得到的編譯錯誤像這樣的:

錯誤LGHT0204:ICE30:目標文件「ewa5nwrn通過LFN系統上的兩個不同組件「'TARGETDIR] \ CSharp \'安裝.zip | BasicApplication.zip':'VS2010CSharpProjectTemplates'和'VS11CSharpProjectTemplates'。這打破了組件引用計數。

我有這樣的目錄結構:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="VS2010_PROJECTTEMPLATES_DIR"> 
    <Directory Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
    </Directory> 
    </Directory> 
    <Directory Id="VS11_PROJECTTEMPLATES_DIR"> 
    <Directory Id="VS11_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
    </Directory> 
    </Directory> 
</Directory> 

請注意,我有VS2010_PROJECTTEMPLATES_DIR和VS11_PROJECTTEMPLATES_DIR內TARGETDIR。錯誤消息顯示它們被忽略。

組件定義如下:

<DirectoryRef Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR"> 
    <Component Id="VS2010CSharpProjectTemplates" Guid="{0976A222-8243-40F2-81AB-84D8F1771840}" Transitive="yes"> 
    <File Id="VS2010BasicApplication" Source="BasicApplication.zip" /> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="VS11_PROJECTTEMPLATES_CSHARP_DIR"> 
    <Component Id="VS11CSharpProjectTemplates" Guid="{A70428F1-AE26-4B07-9F58-D67587B44657}" Transitive="yes"> 
    <File Id="VS11BasicApplication" Source="BasicApplication.zip" /> 
    </Component> 
</DirectoryRef> 

是否有可能安裝在同一個文件到兩個不同的目錄由properties指定?

由於提前, aalmada

回答

2

我沒有任何的源代碼共享,但我可以告訴你,一般我是如何在過去做到了這一點。

我們決定將zip文件「安裝」到我們在Integration文件夾中的主應用程序目錄中,這樣即使在安裝時尚未安裝VS2008和/或VS2010,這些文件也會始終可用。然後,我使用了Util擴展中存在的一些內置屬性以及一對定製的RegLocator搜索來定義一系列與devenv.exe和ItemTemplate,ProjectTemplates以及我們在.NET中需要的其他目錄相關的屬性。然後,我在CopyFile元素中使用這些屬性,以便MSI根據需要將Integration文件夾中的這些文件複製到實際的VS目錄中並進行適當的處​​理。最後,我使用了WiX QuietExec自定義操作來調用Devenv/setup來註冊VS的內容。我還使用ProgressText元素(ActionText表格)使界面看起來不錯,而這一切都發生在VS devenv可能需要一段時間。

+0

我認爲使用'CopyFile'不適合te,因爲它會導致複製的文件永遠不會被卸載。我想你可以通過使用'RemoveFile'元素來處理它,但是最好使用正常的組件安裝邏輯,它應該自動處理所有這些。 – 2012-04-03 09:11:41

+0

Wix 3.5支持在多個目錄中安裝相同的文件。您只需要爲每個引用設置不同的ID。我的問題是不同的.. – aalmada 2012-04-03 10:54:33

+0

Wim-這是不正確的。我們從未遇到卸載問題,並且我們支持定位2005年,2008年和2010年。關於重複文件的好處是,如果屬性從未設置爲值,它將悄悄地不做任何事情。該解決方案取代了使用瘋狂的InstallUtil自定義操作的VDPROJ instlaller,並通過了所有驗證測試並表現出色。它非常優雅。 – 2012-04-03 11:06:30

2

由於Directory元素的WiX的文檔中解釋說:當你忽略了Name屬性要創建別名父Directory元素

這是通過錄制「。」來完成的。作爲安裝程序數據庫中的目錄名稱,如Directory table的Windows安裝程序文檔中所述。

對你而言,我相信你試圖改變這個「。」。值通過在安裝過程中設置VS2010_PROJECTTEMPLATES_DIRVS11_PROJECTTEMPLATES_DIR屬性(因爲directories are properties)而成爲真實的目錄名稱。

這很好,但這裏的問題在於,light鏈接器不知道在安裝過程中將這些屬性設置爲什麼值。它只有Name屬性值才能使用。而在鏈接時,它看起來像是兩次將相同的文件安裝到同一個目錄。

爲了解決這個問題,用不同的佔位符值到VS2010_PROJECTTEMPLATES_DIR和VS11_PROJECTTEMPLATES_DIR目錄元素添加Name屬性。

+0

將名稱屬性添加到VS2010_PROJECTTEMPLATES_DIR和VS11_PROJECTTEMPLATES_DIR無法正常工作,但添加名稱屬性集的基本目錄並沒有奏效。謝謝! – aalmada 2012-04-03 10:12:37

2

我結束了增加兩個基地的目錄,TARGETDIR下,與Name屬性設置:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="VS2010" Name="VS2010"> 
    <Directory Id="VS2010_PROJECTTEMPLATES_DIR"> 
     <Directory Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
     </Directory> 
    </Directory> 
    </Directory> 
    <Directory Id="VS11" Name="VS11"> 
    <Directory Id="VS11_PROJECTTEMPLATES_DIR"> 
     <Directory Id="VS11_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
     </Directory> 
    </Directory> 
    </Directory> 
</Directory> 

下面是屬性代碼(基於WixVSExtension代碼):

<Property Id="VS11DEVENV" Secure="yes"> 
    <RegistrySearch Id="VS11DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw"/> 
</Property> 

<Property Id="VS11_ROOT_FOLDER" Secure="yes"> 
    <RegistrySearch Id="SearchForVS11RootPath" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw"/> 
</Property> 

<Property Id="VS11_PROJECTTEMPLATES_DIR" Secure="yes"> 
    <RegistrySearch Id="VS11DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw"> 
    <DirectorySearch Id="VS11ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" /> 
    </RegistrySearch> 
</Property> 

<Property Id="VS11_ITEMTEMPLATES_DIR" Secure="yes"> 
    <RegistrySearch Id="VS11DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw"> 
    <DirectorySearch Id="VS11ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" /> 
    </RegistrySearch> 
</Property> 

<CustomAction Id="VS11InstallVSTemplates" Property="VS11DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" /> 

然後我發現VS2010模板在VS11下不能正確擴展,但現在這是一個不同的問題: -/

+0

今天剛剛宣佈推出WiX 3.6 RC0。這可能是你會發現對VS11 *屬性的支持。 – 2012-04-03 11:07:27

+0

我升級到了WiX 3.6 RC0,現在我正在爲Visual Studio 11使用新的WixVSExtension屬性和操作。謝謝! – aalmada 2012-04-04 12:54:22

+0

嗨。您可以與我們分享您是如何在2012 Express桌面版中安裝它的? – Goran 2012-11-04 13:23:50