2017-05-11 1 views
2
  • Nous avons une application qui utilise package package NuGet X.
  • Nuget X utilise package NuGet System.Runtime 4.1.1.0
  • notre application a une référence à System.Runtime 4.1.1.0 avec CopyLocal = true
  • System.Runtime 4.0.0.0 existe dans le GAC dans le cadre du .NET Framework

Malheureusement pour nous, parce que Sys.Runtime 4.0.0.0 est dans le GAC ClickOnce n'inclut donc pas System.Runtime 4.1.1.0 dans notre package de déploiement.ClickOnce ne comprenant pas NuGet System.Runtime DLL pour le déploiement, car une autre version existe dans GAC

Notre application lance donc une exception disant que System.Runtime 4.1.1.0 est introuvable au démarrage. Un moyen de forcer System.Runtime 4.1.1.0 à être inclus dans le paquet? J'ai essayé d'éditer le fichier de projet manuellement, mais en vain. Sous le bouton 'fichiers d'application' de l'onglet 'Publier', System.Runtime n'est pas disponible.

Merci

capture d'écran ajoutée de référence dans le projet d'application: enter image description here

+0

ami j'ai répondu question s'il vous plaît regardez ce lien ma réponse et n'oubliez pas votez-les et approuvez-les s'il y avait un problème à nouveau j'ai travaillé pendant 2 ans sur cliquez une fois juste coment ;-) –

Répondre

1

regard sur cette link de ma réponse

ami là ont le problème comme vous il vous suffit de faire Second Way I Wrote A cette question

0
  1. Allez dans votre projet et assurez-vous il y a une référence à Sys.Runtime 4.1.1.0.

  2. clic droit la référence dans l'explorateur de solution et choisissez Propriétés

  3. Sur la feuille de propriétés pour la référence, set « version spécifique » true.

  4. Nettoyer/créer tout.

  5. Reconstruisez votre programme d'installation et test de ClickOnce.

+0

Merci pour votre réponse, mais toutes sont correctement définies. J'ai reconstruit sans effet. Capture d'écran ajoutée à la question. –

0

Dans le absense d'une solution offical ClickOnce, voici une solution:

  1. Coller dans la classe suivante à votre application
  2. Créez un dossier appelé 'ClickOnceSucks de
  3. Place de la DLL avec lesquelles vous rencontrez des problèmes dans ce dossier.
  4. Définissez les DLL comme type EMBEDDED ressources

  5. Définir votre application entrypoint à la classe publique 'AppStartupHook'

    AppStartupHook { [STAThread] public static void Main (string [] args) { ClickOnceSucks();

    App.Main(); 
    } 
    
    /// <summary> 
    /// Copies the embedded resources into the application path before startup. 
    /// </summary> 
    private static void ClickOnceSucks() 
    { 
        const string folderName  = "ClickOnceSucks"; 
        const string structureFormat = "{0}.{1}."; 
    
        var assembly  = Assembly.GetExecutingAssembly(); 
        var resourceFolder = structureFormat.FormatCurrent(assembly.GetName().Name, folderName); 
    
        //Find all resources in the clickoncesucks folder and copy them to our path. 
        assembly 
         .GetManifestResourceNames() 
         .Where(each => each.StartsWith(resourceFolder, StringComparison.Ordinal)) 
         .Select(each => new 
         { 
          Name = each.Replace(resourceFolder, string.Empty), 
          Data = assembly.GetManifestResourceStream(each) 
         }) 
         .Where(each => !File.Exists(each.Name)) 
         .ForEach(each => 
         { 
          using (var fileStream = new FileStream(each.Name, FileMode.Create, FileAccess.Write)) 
           each.Data.CopyTo(fileStream); 
         }); 
    } 
    

    }