ASP.NET 的標籤

來源:互聯網
上載者:User

最近在公司做項目的時候,遇到個小問題,就是公司使用的是VS2008,在項目中我使用了NET 3.5中的簡化屬性

比如:public string Name {get;set;}

按道理來說是沒有問題的,但是在ASP.NET中這個屬性老是報錯:必須聲明主體,因為它未標記為 abstract 或 extern
這個錯誤很明顯是.Net Framework沒有識別出這是簡化的屬性造成的。

 

我就納悶了這ASP.NET 明明是在VS2008(.Net 3.5)下開發的,怎麼不能用簡化屬性?檢查了下網站的屬性上目標 Framework是選的.Net Framework 3.5,在web.config中的<assemblies>標籤下也引入了.Net 3.5的程式集。那為什麼VS編譯器會不識別.Net 3.5的簡化屬性?

 

找了半天最後發現公司ASP.NET項目的web.config中少了一個重要的標籤<system.codedom>(估計是哪位大哥將項目從2.0升級成3.5後,認為這是升級過程中產生的無用標籤,將其刪除了)

我把這個標籤的全部內容貼出來:

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
            <providerOption name="CompilerVersion" value="v3.5"/>
            <providerOption name="WarnAsError" value="false"/>
        </compiler>
        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
            <providerOption name="CompilerVersion" value="v3.5"/>
            <providerOption name="OptionInfer" value="true"/>
            <providerOption name="WarnAsError" value="false"/>
        </compiler>
    </compilers>
</system.codedom>

這個標籤有個至關重要的作用,那就是告訴.Net Framework 該用哪個版本的編譯器來編譯代碼。

 

其中的子標籤

<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
   <providerOption name="CompilerVersion" value="v3.5"/>
   <providerOption name="WarnAsError" value="false"/>
</compiler>

是設定C#語言該用什麼版本的編譯器來編譯,可以看到裡面的屬性name="CompilerVersion"和value="v3.5"指定了編譯器版本是3.5的(不信你把這裡改成2.0,在代碼中使用簡化屬性時又會報錯了)。

 

另外個子標籤

<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
   <providerOption name="CompilerVersion" value="v3.5"/>
   <providerOption name="OptionInfer" value="true"/>
   <providerOption name="WarnAsError" value="false"/>
</compiler>

是設定VB語言該用什麼版本的編譯器來編譯,可以看到也是3.5。

 

如果web.config中沒有<system.codedom>標籤的配置,那麼.Net Framework 預設使用的是2.0版本的編譯器,2.0的編譯器當然不能識別諸如簡化屬性、匿名類等這些3.5才有的文法,所以編譯時間會報錯。這都是因為.Net Framework 3.5是.Net Framework 2.0的擴充版本,不信你可以到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG下查看machine.config和web.config等根設定檔,你會發現其中幾乎沒有對.Net Framework 3.5的相關特性進行配置,裡面的配置大部分還是針對2.0版本的,這是因為.Net 3.5的很多相關特性是在項目中的web.config中擴充的。這一點已在.Net Framework 4.0中得到了改進,因為.Net Framework 4.0並不是舊版本的擴充版本,其大部分相關特性都在根設定檔中配置好了,不需要在項目設定檔中進行配置。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.