在我们的环境中,我们有一个服务器场,每个服务器都运行许多任务.使用内部调度系统部署任务二进制包(并运行任务).
当引入对Microsoft库或运行时的新的公共依赖时,该依赖性通常作为服务器范围的升级推送(例如,Microsoft Visual C++可再发行组件包).目前,服务器安装了一个名为Microsoft Visual F#2.0 Runtime的软件包,并且在GAC中也有FSharp.Core版本4.0.0.0,我不知道从哪里来,但FSharp.Core 4.3.0.0通常不可用.
Visual F#3.0是否有可再发行的软件包可以将FSharp.Core 4.3.0.0部署到GAC中,还是应该包含每个任务二进制文件的FSharp.Core.dll副本?实际上,如果可能的话,我会避免拥有数百个通用DLL的副本.
可能的答案
我很乐意犯错,并很乐意删除这个答案,但我必须得出结论,不存在可将 FSharp.Core 版本 4.3.0.0 的系统范围副本安装到 GAC 中的可再发行软件包。
解决这个问题
以下 WIX 脚本创建用于安装程序集和 NGen 的 .MSI 包。当然,测试是有限的,因此仅当您确实需要 MSI 包来推出程序集时才使用它。为了明确消除任何可能的版权问题的暗示,我将代码发布到公共领域。
<?xml version="1.0" encoding="UTF-8"?>
<!--
This installs FSharp.Core.dll 4.3.0.0 (that comes with Visual Studio
2012) into the GAC and then NGens it for both 32 and 64 bits.
Component ID 61F15BE3-6844-46F3-8E8E-3C81A8DBBFCB and keypath
FSharp_Core_Dll_GAC_File were obtained from VS2012 RTM install DVD,
file \packages\professionalcore\Setup\vs_professionalcore.msi.
Other IDs here match those in the Microsoft file for easier reference.
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx ="http://schemas.microsoft.com/wix/NetFxExtension">
<Product Id="*" Name="Microsoft F# 3.0 Core Redistributable (4.3.0.0)" Language="1033" Version="4.3.0.0"
Manufacturer="YOUR COMPANY HERE" UpgradeCode="5271a7ee-8baa-4348-aff7-edb114090cee">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Property Id="ARPNOMODIFY" Value="yes" Secure="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<Feature Id="FsCore" Title="Microsoft F# Core Libraries" Level="1">
<ComponentRef Id="Redist4.0_GAC_FSharp.Core.dll" />
</Feature>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="GAC" Name="GAC">
<Component Id="Redist4.0_GAC_FSharp.Core.dll" Guid="61F15BE3-6844-46F3-8E8E-3C81A8DBBFCB">
<File Id="FSharp_Core_Dll_GAC_File" Name="FSharp.Core.dll" KeyPath="yes" Assembly=".net"
Source="C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll">
<netfx:NativeImage Id="FSharp_Core_Dll_GAC_File_32" Platform="32bit" Priority="1" Debug="no" Dependencies="no" />
<netfx:NativeImage Id="FSharp_Core_Dll_GAC_File_64" Platform="64bit" Priority="1" Debug="no" Dependencies="no" />
</File>
</Component>
</Directory>
</Directory>
</Product>
</Wix>
Run Code Online (Sandbox Code Playgroud)
将此脚本复制到文件fscore.wxs
,验证已安装参考程序集的路径,并生成 MSI 文件(同时调整 WIX 安装的路径)
candle -ext "C:\Program Files (x86)\WiX Toolset v3.9\bin\WixNetFxExtension.dll" fscore.wxs
light.exe -ext "C:\Program Files (x86)\WiX Toolset v3.9\bin\\WixNetFxExtension.dll" -out FSCoreRedist4300.msi -spdb -sval fscore.wixobj
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2439 次 |
最近记录: |