.NET に関する質問

公開日: 2007 年 12 月 22 日 (作業者: walterov (英語))

更新日: 2008 年 3 月 10 日 (作業者: walterov (英語))

Visual Studio 2008 Beta 2 で構築された ASP.NET Web サイトを、部分的な信頼レベルの構成で使用できますか?

使用できません。Visual Studio 2008 Beta 2 を使用して新しい ASP.NET 3.5 Web サイトを構築する場合、または既存の ASP.NET Web サイトを .NET Framework 3.5 へ移行する場合、信頼レベル "中" または部分的な信頼レベルで構成されたサーバーでは、アプリケーションの展開や実行は行えません (これは ASP.NET Web ホスティング向けの推奨される動作です)。この問題は、Visual Studio 2008 Beta 2 または Visual Web Developer 2008 Express Beta 2 を使用して構築されたサイトにのみ影響を及ぼします。.NET Framework 3.5 をコンピューターにインストールしても、.NET Framework の以前のバージョンで構築されたアプリケーションや Web サーバー上の既存のアプリケーションには影響ありません。

部分的な信頼レベルでもアプリケーションを正常に実行できるように Web サイトを修正する方法が用意されています。マイクロソフトでは、影響のある製品をダウンロードしたユーザー向けにこの対処方法をお知らせしています。.NET Framework 3.5 ホスティング事業者は、この情報をユーザーの皆様にお知らせいただけます。この対処方法の実行に際して、ホスト事業者側で必要な作業はありません。

Visual Studio 2008 Beta 2 または Visual Web Developer 2008 Express を使用して新たに ASP.NET Web サイトを構築すると、アプリケーションの web.config 構成ファイルに新しいエントリが追加されます。追加が行われるのは、新しいプロジェクトを作成したり、既存の Web サイトを .NET Framework 3.5 対応に移行したりする場合です。追加される構成エントリは次のとおりです。

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

この Web サイトを信頼レベル "中" または部分的な信頼レベル設定で実行すると、ASP.NET により "現在の信頼レベルでは 'compilerOptions' 属性を使用できません" というエラー メッセージが表示されます。上記の構成で指定されている compilerOptions 設定は、信頼レベル "中" または部分的な信頼レベル構成では許可されません。

メモ: サーバーのセキュリティ設定によっては、このエラー メッセージが表示されたりされなかったりします。

これを回避するには、Visual Studio 2008 Beta 2 または Visual Web Developer 2008 Express で構築した Web サイトを部分的な信頼レベル構成で展開する際に、web.config 構成ファイルから compilerOptions 設定および warningLevel 設定を削除します。添付のドキュメントでこの回避策について説明しています。このドキュメントはユーザーの方にも配布していただけます。

このような回避方法が原因で、Web サイトにその他の影響が生じることがあります。この問題については、添付のドキュメントで詳しく説明しています。

部分的な信頼レベル構成で .NET Framework 3.5 Beta 2 の LINQ 機能を既定で使用できますか?

いいえ、使用できません。.NET Framework 3.5 Beta 2 には、.NET Framework 3.5 の主な新機能の 1 つである統合言語クエリ (LINQ) と呼ばれる機能があります。この機能により、Web サイトでリッチ データ機能を使用できますが、既定では、信頼レベル "中" または部分的な信頼レベル構成では正常に機能しません (これは ASP.NET Web ホスティング向けの推奨される動作です)。このような構成で LINQ を使用するには、ホスト管理者がサーバーの信頼ポリシー設定を変更する必要があります。

信頼レベル "中" または部分的な信頼レベル構成では、ASP.NET Web サイトに対するコード アクセス許可は、Web サーバーのコード アクセス セキュリティ (CAS) ポリシー ファイルで決定します。Web サイトの CAS ポリシー ファイルは、.NET Framework 3.5 を Web サーバーにインストール後も .NET Framework 2.0 のポリシー ファイルが引き続き適用されます。

.NET Framework 3.5 の LINQ 機能で新しいアクセス許可 RestrictedMemberAccess を付与するには、CAS ポリシー ファイルが必要です。このアクセス許可は、ASP.NET 2.0 では既定で付与されていません。中または部分的な信頼レベルで LINQ を正しく機能させるには、このポリシーを許可するよう CAS ポリシー ファイルを変更します。

メモ: この変更を行うと、同じサーバーで実行している ASP.NET 2.0 Web サイトに対してもこのポリシーが許可されます。これは、信頼レベル "中" で実行するサイトに対しても許容範囲内の変更であると判断しています。この変更が原因で、中または部分的な信頼レベルで実行する既存の ASP.NET 2.0 Web サイトに影響が生じることはありません。

回避策として、サーバーで以下の手順を実行することで、信頼レベル "中" で LINQ を有効にできます。

1.  コマンド プロンプトを開き、ASP.NET 2.0 信頼ポリシー ファイルがあるディレクトリへ移動します。このディレクトリは、次の Windows ディレクトリにあります。

%windir%\Microsoft.NET\Framework\v2.0.50727\config

2.  どの CAS ポリシー ファイルを修正するか決定します。信頼レベル "中" を使用している場合は、web_mediumtrust.config です。

3.  既存ファイルのバックアップを取ります。

4.  CAS ポリシー ファイルの <SecurityClasses> セクションを確認します。このセクションに ReflectionPermission という名前のエントリがない場合、次のように新しいエントリを追加します。

<SecurityClass Name="ReflectionPermission" Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

既定の信頼レベル "中" の設定を使用している場合は、このエントリを追加する必要があります。信頼レベルの設定によっては、このエントリが既に CAS ポリシー ファイルに存在する場合があります。

5.  CAS ポリシー ファイルの <NamedPermissionSets> セクションを確認します。このセクションに ReflectionPermission という名前のエントリがない場合、次のように新しいエントリを追加します。

<IPermission
        class="ReflectionPermission"        version="1"        Flags="RestrictedMemberAccess"
/>

既定の信頼レベル "中" の設定を使用している場合は、このエントリを追加する必要があります。

その他の信頼レベル構成を使用していて、このセクションに ReflectionPermission というエントリが既に存在する場合、フラグ設定を変更して RestrictedMemberAccess アクセス許可を追加できます。フラグはコンマで区切ります。たとえば、既定で信頼レベル "高" の設定を使用している場合、このセクションを次のように変更します。

<IPermission
        class="ReflectionPermission"        version="1"        Flags="ReflectionEmit, RestrictedMemberAccess"
/>

6.  ファイルを保存して、Web サーバーを再起動します。

変更が正しく行われたことを確認するには、ZIP 圧縮ファイルを含む ASP.NET Web サイトを新規作成して、実行します。

既知の問題: .NET 3.0 のインストール順

共有ホスティングが有効な状態で、Windows Server® 2008 または IIS 7 に .NET 3.0 をインストールすると、インストーラーが、コンピューター上で共有ホスティングが有効になっていることを無視して、共有 UNC ではなくローカルの applicationhost.config を更新してしまう、という問題が発生します。この問題を防ぐには、まず最初に .NET 3.0 をインストールし、その上で共有ホスティングを有効にして applicationhost.config を展開します。この問題は、.NET 3.0 が初めて有効になるとき (モジュール/ハンドラーの登録時) にのみ発生します。それ以降の処理 (バインドやアプリケーション プールの変更など) は、共有構成ファイルの設定どおり正しく実行されます。

.NET 3.5 に .NET 1.1 は含まれていますか?

はい。.NET 3.5 の一部として .NET の旧バージョンすべて (1.0 から 3.0 まで) が含まれています。.NET 3.5 は、包括的なパッケージです。

.NET 3.5 Framework には、Entity Framework Beta 2 が含まれていますか?

いいえ。.NET Framework 3.5 SP1 が必要になります。以下からダウンロードしてください。

http://www.microsoft.com/downloads/details.aspx?familyid=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=ja

リリース情報を以下に示します。

http://blogs.msdn.com/adonet/archive/2008/08/11/what-s-new-in-the-vs-2008-sp1.aspx (英語)