簡體   English   中英

當我將目標框架更改為4.0時,為什么我的WPF 3.5應用程序獲得了app.config文件?

[英]Why did my WPF 3.5 app gain an app.config file when I changed the target framework to 4.0?

我將WPF應用程序的目標.NET框架從3.5更改為4.0。

進行此更改后,我注意到VS2010生成了一個app.config文件,並將其放在主項目文件夾中。 它的構建操作設置為“none - do not copy”。

此app.config文件包含以下XML:

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

我項目的.csproj文件包含:

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

問題:

  1. app.config中的<supportedRuntime version="4.0"與.csproj中的<Project ToolsVersion="4.0"之間的含義有何不同? 是否覆蓋了另一個或者它們實際上意味着不同的東西?
  2. 如果沒有復制到輸出目錄,app.config文件是否會執行任何操作?
  3. 我可以刪除app.config文件而不會破壞任何內容嗎?

編輯

還有一個問題:

如果我從頭開始創建WPF 4.0應用程序,為什么默認情況下沒有創建app.config文件? (這不意味着文件是不必要的嗎?)

App.config文件告訴.Net 運行時程序集需要.Net 4.0。
它將作為<YourApp>.exe.config復制到outout文件夾中。

  1. .csproj僅在編譯時使用。
  2. 沒有; App.config由運行時從程序集的目錄中讀取
  3. 不,你不應該。

這篇Microsoft博客文章很好地解釋了它:

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

app.config文件的處理是什么?

如果將項目更改為以完整框架為目標,VS將添加一個配置文件(app.config),將該應用程序聲明為“完整”應用程序。

替代文字

這使CLR加載程序能夠阻止任何僅在具有客戶端配置文件的計算機上完全定位的NET4應用程序。 在這種情況下,CLR會提示用戶安裝NET4。

例如,您可能會看到此對話框:

替代文字

請注意,在NET4 Beta1和NET3.5 SP1客戶端配置文件中,如果app.config缺少CLR,則假設您已定位完整框架。 現在已經逆轉了。 換句話說,如果您的NET4應用程序缺少app.config,則默認情況下CLR會假定您的應用程序定位到NET4客戶端配置文件! 因此,當需要加載不在客戶端配置文件中的程序集時,您的應用程序可能會隨機崩潰。

具體答案:

  1. 正如SLaks所說,.csproj設置告訴編譯器使用什么框架版本,而運行時(CLR)使用app.config文件來確定用戶需要下載哪個(如果有的話)框架版本。

  2. 即使構建操作為“none - do not copy”,app.config也將被復制到輸出中。 app.config是一個特殊文件,將自動重命名為“[name_of_app] .exe.config”,然后復制到輸出目錄。

  3. 對於WPF 4.0應用程序,如果應用程序面向.NET 4.0客戶端配置文件,則可以省略app.config。 如果它針對完整的.NET 4.0框架(包括asp.net之類的東西),則必須保留該文件。

  4. 默認情況下不創建此文件的原因是默認情況下WPF 4.0應用程序以.NET Framework 4.0 Client Profile為目標。 由於運行時將假定所有.NET 4.0應用程序僅需要安裝客戶端配置文件,因此一切都會正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM