2014-12-31 14 views
6

Nel nostro ambiente, abbiamo una server farm, ogni server che esegue una serie di attività. I pacchetti binari delle attività vengono distribuiti (e le attività vengono eseguite) con un sistema di pianificazione interno.Esiste un runtime impacchettato ridistribuibile con FSharp.Core 4.3.0.0?

Quando viene introdotto un nuovo comune dipendenza da librerie o runtime di Microsoft, che la dipendenza è normalmente spinto come un aggiornamento a livello di server (ad esempio, un Microsoft Visual C++ Redistributable Package). Al momento, i server dispongono di un pacchetto denominato Microsoft Visual F # 2.0 Runtime installato e hanno anche la versione 4.0.0.0 di FSharp.Core nel GAC di cui non ho idea da dove, ma FSharp.Core 4.3.0.0 non è comunemente disponibile.

Esiste un pacchetto ridistribuibile per Visual F # 3.0 che distribuire FSharp.Core 4.3.0.0 nel GAC, o dovremmo invece includere una copia di FSharp.Core.dll con ogni binario di attività? Effettivamente, eviterei di avere centinaia di copie di una DLL comune se possibile.

risposta

1

probabile risposta

sarei felice di essere sbagliato e rimuoverà felice questa risposta, ma devo concludere non v'è alcun pacchetto ridistribuibile esiste che sarebbe installare una copia a livello di sistema di FSharp.Core versione 4.3.0.0 nel GAC.

Hack intorno alla questione

Il seguente script WIX crea il pacchetto MSI che installa il montaggio e NGen di esso. Naturalmente, il test era limitato, quindi usalo solo se hai davvero bisogno di un pacchetto MSI per distribuire l'assemblaggio. Per disperdere espressamente qualsiasi suggerimento di possibili problemi di copyright, sto rilasciando il codice di pubblico dominio.

<?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> 

Copia questo script in un file fscore.wxs, verificare il percorso per l'assemblaggio di riferimento installato, e generare un file MSI come (regolare anche percorsi per Wix installazione)

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 
2

C'è uno NuGet Package solo per FSharp.Core e a redistributable package che include anche strumenti di compilazione.

+0

Il primo non è molto rilevante, dal momento che non possiamo usare i pacchetti NuGet per aggiornare i server. Per chiarire, è il secondo * il * pacchetto ridistribuibile che dovrebbe essere installato sul server? Non abbiamo bisogno di strumenti di compilazione sui server. Non c'è un pacchetto senza gli strumenti? – kkm

+0

Ovviamente è possibile utilizzare i pacchetti NuGet per aggiornare i server. Sono solo file zip - scrivi uno script per estrarre gli assembly dal GAC se non riesci a trovarne uno già scritto. Il pacchetto NuGet è il pacchetto senza gli strumenti. [Benvenuto nel futuro di.Sviluppo NET] (http://blog.maartenballiauw.be/post/2014/12/19/Building-future-NET-projects-is-quite-pleasant.aspx). Personalmente, abbiamo appena ridistribuito FSharp.Core.dll con le nostre altre dipendenze. –

+0

Ci dispiace, ma la risposta non è corretta. Ho appena installato il pacchetto redistributable 3.1.2 come suggerito e aggiunto due versioni di FSharp.Core nel GAC: 2.3.0.0 e 4.3.1.0. Le nostre applicazioni non riescono ancora a caricare quando si tenta di associare a 4.3.0.0. Apparentemente, non vi è alcuna politica di reindirizzamento macchina installata con questo pacchetto. – kkm

2

Il download collegato nella risposta di Joel Mueller (anche here) è l'installazione ufficiale di Microsoft. Contiene il compilatore, interattive, più versioni del runtime e i binari di integrazione di Visual Studio.

I bit di integrazione VS vengono distribuiti solo se VS è installato (scenario dev). Altrimenti, installerà semplicemente il compilatore/interactive/runtime (scenario del server).

Solo l'ultima versione del runtime (4.3.1.0 in questo momento) viene sottoposta a GAC ​​dal programma di installazione, ma vengono distribuite anche altre versioni, tra cui 4.3.0.0.

L'aggiunta di assembly al GAC è molto semplice. Basta eseguire gacutil /I "C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll" come amministratore.

+0

Un problema qui è che non c'è 'gacutil' sui server, poiché questo è uno strumento SDK. Mi è capitato di utilizzare la stessa [estensione di PowerShell] (https://powershellgac.codeplex.com/) suggerita da lui, e questa estensione può installare assembly su GAC. Ma questo non è un modo automatico di distribuire le modifiche. So che l'IT può distribuire aggiornamenti sotto forma di file eseguibili e MSI. – kkm

Problemi correlati