簡體   English   中英

如何以編程方式將目標框架從項目/解決方案的4.0更改為3.5?

[英]How can I progrommatically change the target framework from 4.0 to 3.5 of a project/solution?

編輯3:經過更多的谷歌搜索后,.NET 3.5應用程序中似乎無法擁有TargetFrameworkMoniker屬性。 所以我想我應該問一個不同的問題。
如何將目標框架從4.0更改為3.5? 不幸的是,我只能找到其他方法的東西。 還是更好,但是我如何以編程方式將項目的目標框架版本設置為4.0以外的版本?

原始問題:我剛剛切換到vs2010。 我有一個使用.net 3.5的應用程序。 它加載由其他應用程序生成的插件。 插件使用的是.net 4,因此無法加載。 我正在使用EnvDTE.Project創建一個項目並設置設置。 我找不到為此需要設置的設置。

編輯1:我正在為大約50個解決方案生成代碼。 當我從vs2005切換到vs2010時,這些解決方案中的項目默認為.NET Framework 4.0。 因此,當我為這些解決方案生成代碼時,需要將.NET Framework設置為3.5。

編輯2:經過大量的搜尋后,我發現了這個 所以我嘗試了這個:

loProp = vsGetProperty("TargetFrameworkMoniker");
vsSetValue(loProp, ".NETFramework,Version=v3.5");

這兩種方法的定義如下。 據我所知,他們所做的與

project.Properties.Item("TargetFrameworkMoniker").Value =   ".NETFramework,Version=v4.0,Profile=Client";

我稍后會在代碼中開始獲取“屬性不可用異常”。 當我刪除新行時,除項目目標框架仍為4.0之外,其他所有項目均正常工作。

代碼生成器的目標框架為3.5,因此我無法使用該鏈接中第二個示例所示的FrameworkName類。

這是vsGetProperty

    protected Property vsGetProperty(string aProperty)
    {
        bool lbDone = false;
        int liCount = 0;
        Property loProp;
        while (!lbDone && liCount < pMaxRetries)
        {
            try
            {
                loProp = pProject.Properties.Item(aProperty);
                lbDone = true;
                return loProp;
            }
            catch (System.Runtime.InteropServices.COMException loE)
            {
                liCount++;
                if ((uint)loE.ErrorCode == 0x80010001)
                {
                    // RPC_E_CALL_REJECTED - sleep half sec then try again
                    System.Threading.Thread.Sleep(pDelayBetweenRetry);
                }
            }
        }
        return null;
    }

和vsSetValue

    protected void vsSetValue(Property aProperty, string aValue)
    {
        bool lbDone = false;
        int liCount = 0;
        while (!lbDone && liCount < pMaxRetries)
        {
            try
            {
                aProperty.Value = aValue;
                lbDone = true;
            }
            catch (System.Runtime.InteropServices.COMException loE)
            {
                liCount++;
                if ((uint)loE.ErrorCode == 0x80010001)
                {
                    // RPC_E_CALL_REJECTED - sleep half sec then try again
                    System.Threading.Thread.Sleep(pDelayBetweenRetry);
                }
            }
        }
    }

我認為您可能會為您的問題/解決方案投入過多的精力和思想。 也許有所不同,因為您的項目中有多少代碼。 只要他們不使用4.0功能,我就看不到為什么您無法打開項目屬性(在解決方案資源管理器中右鍵單擊項目名稱,選擇屬性)並在應用程序選項卡中更改目標框架。

切換時應顯示警告。 當我從4.0客戶端配置文件更改為4.0時,這就是我發生的事情。 我將確保您已簽入所有代碼,然后嘗試使用此方法。 如果失敗和/或中斷,請不要提交轉換並替換為最新的轉換。

暫無
暫無

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

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