実行時のクラッシュを避けるために、VS2008 の開発者に .net 2.0 (サービス パックではない) をターゲットにさせるにはどうすればよいでしょうか?
-
20-09-2019 - |
質問
そこで、開発チームを VS2008 にアップグレードしたいと考えています。企業として、私たちはまだ 3.5 ランタイムを展開していません。
読んだところによると、VS2008 をインストールすると、いくつかの新しい API を備えた .net 2.0 SP1 が自動的に提供され、2.0 ランタイムをターゲットにすると 2.0 SP1 が想定されるようです。
ただし、SP1 がユーザーに展開されない場合、実行時に中断が発生します。
- とにかく、VS を dotnet 2.0 (SP1 ではなく) ターゲットにすることはできますか?
- 開発者が、ローカルでは問題なくコンパイルおよび実行されるが、実稼働環境では爆発する API を使用しないように、この問題に対する他の解決策はありますか?
fxcop にはこれに対するチェックがあるようですが、この問題にはもっと確実な解決策があるはずです。
解決
これは難しいこともあり、簡単なこともあります。私たちは両方のルートを歩きました。
簡単な方法:.Net 2.0 のみがインストールされたビルド サーバーを確立します。チェックイン時に実行されるようにビルドを自動化します (CruiseControl.Net を使用します)。プロジェクトをビルドするには、コマンド プロンプトから MSBuild を使用する必要があります。
3.5 がインストールされているマシンの場合、.Net 2.0 フレームワーク ディレクトリから MSBuild を実行した場合でも、MSBuild ツールの多くが置き換えられます。これを回避するには、.Net 2.0 ランタイムのみの継続使用を強制するアプリケーションを作成する必要があります。これは簡単なことではありません。プロジェクトを直接読み込み、Microsoft.Build.* フレームワークを使用してビルドを呼び出します。これだけではまだ不十分です。.config ファイルで使用するアセンブリを固定する必要があります。
u003Cconfiguration>u003Cruntime>u003CassemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">u003CdependentAssembly>u003CassemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>u003CbindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/>u003C/dependentAssembly>u003CdependentAssembly>u003CassemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>u003CbindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/>u003C/dependentAssembly> ...など...u003C/assemblyBinding>n u003C/runtime>nu003C/configuration>
ところで、VS2008 で新しく作成されたプロジェクトで、「MSBuildToolsPath」というプロパティを定義する必要がある場合にも問題が発生する可能性があります。MSBuild を使用する場合はコマンド ラインでこれを定義でき、2 番目のオプションを使用する場合はプログラムで指定できます。
engine.GlobalProperties.SetProperty( "MSBuildToolsPath", msbuildPath );
他のヒント
おそらく、 supportedRuntimeの構成要素に見てする価値があります。しかし、私はこれが助けることができるかはわからない。