[英]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">
問題:
<supportedRuntime version="4.0"
與.csproj中的<Project ToolsVersion="4.0"
之間的含義有何不同? 是否覆蓋了另一個或者它們實際上意味着不同的東西? 編輯
還有一個問題:
如果我從頭開始創建WPF 4.0應用程序,為什么默認情況下沒有創建app.config文件? (這不意味着文件是不必要的嗎?)
App.config文件告訴.Net 運行時程序集需要.Net 4.0。
它將作為<YourApp>.exe.config
復制到outout文件夾中。
這篇Microsoft博客文章很好地解釋了它:
app.config文件的處理是什么?
如果將項目更改為以完整框架為目標,VS將添加一個配置文件(app.config),將該應用程序聲明為“完整”應用程序。
這使CLR加載程序能夠阻止任何僅在具有客戶端配置文件的計算機上完全定位的NET4應用程序。 在這種情況下,CLR會提示用戶安裝NET4。
例如,您可能會看到此對話框:
請注意,在NET4 Beta1和NET3.5 SP1客戶端配置文件中,如果app.config缺少CLR,則假設您已定位完整框架。 現在已經逆轉了。 換句話說,如果您的NET4應用程序缺少app.config,則默認情況下CLR會假定您的應用程序定位到NET4客戶端配置文件! 因此,當需要加載不在客戶端配置文件中的程序集時,您的應用程序可能會隨機崩潰。
具體答案:
正如SLaks所說,.csproj設置告訴編譯器使用什么框架版本,而運行時(CLR)使用app.config文件來確定用戶需要下載哪個(如果有的話)框架版本。
即使構建操作為“none - do not copy”,app.config也將被復制到輸出中。 app.config是一個特殊文件,將自動重命名為“[name_of_app] .exe.config”,然后復制到輸出目錄。
對於WPF 4.0應用程序,如果應用程序面向.NET 4.0客戶端配置文件,則可以省略app.config。 如果它針對完整的.NET 4.0框架(包括asp.net之類的東西),則必須保留該文件。
默認情況下不創建此文件的原因是默認情況下WPF 4.0應用程序以.NET Framework 4.0 Client Profile為目標。 由於運行時將假定所有.NET 4.0應用程序僅需要安裝客戶端配置文件,因此一切都會正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.