2011-01-10 14 views
1

編集3: これで、.NET 3.5アプリケーションでTargetFrameworkMonikerプロパティを使用できないように見えるようになりました。だから私は別の質問をするべきだと思う。
ターゲットフレームワークを4.0から3.5に変更するにはどうすればよいですか?残念ながら、私は他の方法に行く方法についてのみ見つけることができます。それとももっと良いのですが、プロジェクトのターゲットフレームワークバージョンをprogrommaticallyで4.0以外のものに設定するにはどうすればよいですか?プロジェクト/ソリューションのターゲットフレームワークを4.0から3.5にプログロマチックに変更するにはどうすればよいですか?

オリジナルの質問: 私はちょうどvs2010に切り替えました。私は.net 3.5を使用するアプリケーションを持っています。それは、別のアプリで生成されたプラグインを読み込みます。プラグインは.net 4を使用しているため、ロードできません。 EnvDTE.Projectを使用してプロジェクトを作成し、設定を行います。私はこれのために設定する必要があるものを見つけることができません。

編集1: 私は約50のソリューションのコードを生成しています。 vs2005からvs2010に切り替えると、これらのソリューションのプロジェクトは.NET Framework 4.0にデフォルト設定されています。だから私は、これらのソリューションのコードを生成しているときに.NET Frameworkを3.5に設定する必要があります。

編集2: 多くのグーグルで私はthisを見つけました。私はこれを試しました:

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

これらの2つの方法の定義は以下のとおりです。私の知る限り、彼らは、私は、コードの後半でプロパティ不可例外を取得開始

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

と同じ操作を行います。私が新しい行を削除すると、プロジェクトのターゲットフレームワークを除いてすべてが機能しますが、まだ4.0です。

コードジェネレータのターゲットフレームワークは3.5なので、そのリンクの2番目の例に示すように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); 
       } 
      } 
     } 
    } 

答えて

0

です。おそらくあなたのプロジェクトにどれだけのコードがあるのか​​は異なるでしょう。 4.0の機能を使用していない限り、なぜプロジェクトプロパティを開くことができなかったのか(ソリューションエクスプローラでプロジェクト名を右クリックしてプロパティを選択する)、アプリケーションタブでターゲットフレームワークを変更することはできません。

切り替え時に警告が表示されるはずです。私は4.0のクライアントプロファイルから4.0に変更したときにそれが私に起こりました。私はすべてのあなたのコードをチェックインして、このメソッドを試してみてください。それが失敗したり壊れたりする場合は、変換をコミットして最新のものに置き換えないでください。

+0

できます。しかし、私は週2〜3回、50〜100のプロジェクトでそれをしなければならないでしょう。 – scott

+0

奇妙なことに、一度3.5に変わったら、何週間に1度それをする必要がありますか? – jlafay

+0

新しいバージョンがリリースされるたびに、これらのプロジェクトを再度自動生成する必要があります。また、ターゲットフレームワークのデフォルトは4.0です。毎回修正する必要があります。 – scott

関連する問題