2015-11-18 16 views
7

Ho creato un pacchetto NuGet da DLL .NET4.0 che includono codice misto (gestito e nativo).Pacchetto NuGet con dipendenza da Visual C++ 2013 Runtime

il codice nativo è confezionato all'interno del .NET4.0 DLL, ma ha una dipendenza dal Visual C++ 2013 Redistributable

sto cercando di brainstorming modi a uno confezionare il redist con il pacchetto NuGet e/o avvertire l'utente che ne hanno bisogno, ma sto disegnando un vuoto.

Qualcuno ha qualche idea?

+0

Abbastanza dubbioso che sia una buona idea nasconderlo. Non è solo il CRT, che è facile da risolvere, ma anche una dipendenza durissima rispetto all'impostazione di destinazione della piattaforma del progetto client. Molto difficile da nascondere se non si dispone di un wrapper puro. Consigli di base [in questo post] (http://stackoverflow.com/a/28771413/17034). –

+0

Non voglio necessariamente nascondermi, ma voglio almeno informare. In caso contrario, chiedo agli utenti di colpire il supporto tecnico con domande tipo "Y U NO Work" –

risposta

1

In realtà mi sono risolto da solo. Mentre non sono riuscito a trovare una soluzione per includere VCpp Runtime come dipendenza da un pacchetto NuGet, ho trovato una soluzione per avvisare l'utente che era necessario il Runtime di Visual C++ 2013.

ho eseguito questo codice, una volta, in modo statico, all'avvio del componente/libreria che richiede l'VC++ Runtime:

private static void AssertVcppDependencies() 
    { 
     var system32Path = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86); 
     var system64Path = Environment.GetFolderPath(Environment.SpecialFolder.System); 

     string platform = Environment.Is64BitProcess ? "x64 and x86" : "x86"; 
     bool success = File.Exists(Path.Combine(system32Path, MSVCP120DllName)); 

     if (Environment.Is64BitProcess) 
     { 
      success &= File.Exists(Path.Combine(system64Path, MSVCP120DllName)); 
     }    

     if (!success) 
     { 
      throw new InvalidOperationException("This Application Requires the Visual C++ 2013 " + platform + 
       " Runtime to be installed on this computer. Please download and install it from https://www.microsoft.com/en-GB/download/details.aspx?id=40784"); 
     } 
    } 

Questo dovrebbe avvisare eventuali sviluppatori che stanno consumando il pacchetto NuGet che hanno bisogno di installare il runtime .

Problemi correlati