2010-12-05 2 views
4

J'ai changé le framework .NET cible de mon application WPF de 3.5 à 4.0.Pourquoi mon application WPF 3.5 a-t-elle obtenu un fichier app.config lorsque j'ai changé le framework cible en version 4.0?

Après avoir effectué cette modification, j'ai remarqué qu'un fichier app.config a été généré par VS2010 et placé dans le dossier principal du projet. Son action de construction est définie sur "none - ne pas copier".

Ce fichier app.config contient le code XML suivant:

<?xml version="1.0"?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Le fichier .csproj pour mon projet contient:

<Project 
    ToolsVersion="4.0" DefaultTargets="Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

Questions:

  1. Quelle est la différence de signification entre <supportedRuntime version="4.0" dans app.config et <Project ToolsVersion="4.0" dans .csproj? Est-ce que l'un prend le pas sur l'autre ou est-ce qu'ils signifient réellement des choses différentes?
  2. Le fichier app.config fait-il quoi que ce soit s'il n'est pas copié dans le répertoire de sortie? Est-il possible de supprimer le fichier app.config sans rien casser?

Modifier

une question:

Si je crée une application WPF 4.0 à partir de zéro, pourquoi aucun fichier app.config créé par défaut? (Et cela n'implique-t-il pas que le fichier est inutile?)

Répondre

4

Cet article de blog Microsoft explique assez bien:

http://blogs.msdn.com/b/jgoldb/archive/2010/04/12/what-s-new-in-net-framework-4-client-profile-rtm.aspx

Quel est le problème avec le fichier app.config?

Si vous modifiez le projet pour cibler la structure complète, VS ajoutera un fichier de configuration (app.config) qui déclare l'application en tant qu'application "complète".

alt text

Cela permet au chargeur CLR pour bloquer toutes les applications qui ciblent NET4 complet sur les machines qui ont seulement le profil du client. Dans ce cas, le CLR invite l'utilisateur à installer NET4 complet.

E.g.vous pouvez voir cette boîte de dialogue:

alt text

Notez que dans NET4 Beta1 et NET3.5 SP1 Client Profile, si le app.config manquait le CLR, l'hypothèse est que vous avez ciblé le cadre complet. Ceci est maintenant inversé. En d'autres termes, si votre app NET4 manque app.config, par défaut le CLR suppose que votre application cible le profil client NET4! Ainsi, votre application peut se bloquer au hasard lorsqu'elle doit charger les assemblys qui ne sont pas dans le profil client.

Réponses spécifiques:

  1. Comme dit SLaks, les paramètres de .csproj indique au compilateur version du framework à utiliser, alors que le fichier app.config est utilisé par le moteur d'exécution (CLR) à déterminez la version du framework (le cas échéant) que l'utilisateur doit télécharger. App.config sera copié en sortie même si l'action de construction est "none - ne pas copier". app.config est un fichier spécial qui sera automatiquement renommé en "[nom_app_app] .exe.config" puis copié dans le répertoire de sortie.

  2. Pour les applications WPF 4.0, app.config peut être omis si l'application cible le profil client .NET 4.0. S'il cible le framework .NET 4.0 complet (qui inclut des choses comme asp.net), le fichier doit être conservé.

  3. La raison pour laquelle ce fichier n'est pas créé par défaut est que les applications WPF 4.0 ciblent le profil client .NET Framework 4.0 par défaut. Étant donné que le moteur d'exécution supposera que toutes les applications .NET 4.0 n'ont besoin que du profil client, tout ira bien.

4

Le fichier App.config indique au .Net l'exécution que l'assembly requiert .Net 4.0.
Il est copié dans le dossier Outout sous la forme <YourApp>.exe.config.

  1. Le fichier .csproj est uniquement utilisé au moment de la compilation.
  2. Non; App.config est lu par le runtime à partir du répertoire de l'assembly
  3. Non, vous ne devriez pas.
Questions connexes