トップ回答者
エラー「構成システムを初期化できませんでした。」が発生する

質問
-
ご教授願います。
Visual Studio .net 2003で開発したアプリをVisual Studio 2005でソース変換・ビルドしたのち実行したところ、下記のステップでエラー「構成システムを初期化できませんでした。」でコケてしまいました:
m_TCPChannel = New System.Runtime.Remoting.Channels.Tcp.TcpChannel(tcp_properties, Nothing, Nothing)
Exception.ToStringを見ると「構成ファイルXXXX.exe.configにはルート<configuration>タグが含まれていません。」となっていました。そこで単純に当該プロジェクトのapp.configファイルのconfigoptをconfigurationに変えて再実行したところ、今度は「認識されない構成セクションxs:schemaです。」になりました。
さらに単純に<configuration></configuration>だけのapp.configファイルにして実行したところ、コケてたエラーステップは回避されました。環境設定の問題だとは思いますが、アドバイス願います。
app.configファイル:
<?xml version="1.0" standalone="yes"?>
<configopt>
<xs:schema id="configopt" xmlns="" xmlns:xs="URLリンク" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="configopt" msdata:IsDataSet="true" msdata:Locale="en-AU">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Environment">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="System" type="xs:string" minOccurs="0" />
<xs:element name="DataLibrary" type="xs:string" minOccurs="0" />
<xs:element name="Default" type="xs:boolean" minOccurs="0" />
<xs:element name="UserId" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Environment>
<Name>Test</Name>
<System>XXXX.COM</System>
<DataLibrary>XXXTEST</DataLibrary>
<Default>false</Default>
<UserId></UserId>
</Environment>
<Environment>
<Name>Production</Name>
<System>XXXXX.COM</System>
<DataLibrary>XXXPROD</DataLibrary>
<Default>true</Default>
<UserId />
</Environment>
</configopt>
回答
-
結果、App.configファイルを正しい形式(<configuration> ... </configuration>)に修正し、旧App.configファイルはApp1.configファイルにリネームし、プロクラム上で別途読み込む様に修正しました。
- 回答としてマーク AkiraYamazaki 2014年2月25日 14:44
すべての返信
-
-
コンパイル時、ソースコードとしてこららのファイルがあるかどうかよりも、実行時、XXXX.exeと同じ場所にXXXX.exe.configという名前のファイルがあり、その内容は質問文に挙げられているものなのでしょうか?
というのも、.NET Frameworkにおける XXXX.exe.config はアプリケーション構成ファイルと呼ばれ、例えばこちらの説明に出てくるような形式をしています。内容は追加こそあれ.NET Framework 1.0より変わっておらず、質問文に挙げられているものは全くの別ファイルです。
Visual Studio 2003及び.NET Framework 1.1での挙動がどうだったかまでは覚えていませんが、
ソースコードにはApp.configというファイル名で置かれ、コンパイル時にXXXX.exe.configにリネームされます。実行時にはXXXX.exe.configの有無が確認され、内容が不正確な場合はエラーとなりプログラムは実行できません。ですので、.NET Framework 1.1で実行できていた、ということの方が不思議です。
-
はい
XXXX.exeと同じ場所にXXXX.exe.configがあり、内容は質問時に添付したapp.configファイルです。
このXXXX.exeをWindows XP/.NET Framework1.1で実行すると正常に稼働し、Windows 7/.NET Framework 2.0で実行すると「構成システムは初期化できませんでした。」のエラーとなります。Windows 7/.NET Framework 2.0上だとVisual Studio 2005でビルドしなおしたexeも、元々のexeも同じエラーとなります。
なので、NET Framework 1.1だと「m_TCPChannel = New System.Runtime.Remoting.Channels.Tcp.TcpChannel(tcp_properties, Nothing, Nothing)」でXXXX.exe.configのSyntaxチェックがされず、.NET Framework 2.0だとされるためエラーとなるのか?と考えました。
-
実際にWindows XPのPCを引っ張り出してきて、念のためVisual Studio .NET 2003もインストールし、検証してみました。
やはり、「m_TCPChannel = New System.Runtime.Remoting.Channels.Tcp.TcpChannel(tcp_properties, Nothing, Nothing)」でエラーは発生しませんでした。
Visual Studio .NET 2003/.NET Framework 1.1とVisual Studio 2005/.NET Framework 2.0とでは挙動が多少異なる様です。でもエラーチェックが向上しただけなら、そんなにクリティカルではないです。
-
結果、App.configファイルを正しい形式(<configuration> ... </configuration>)に修正し、旧App.configファイルはApp1.configファイルにリネームし、プロクラム上で別途読み込む様に修正しました。
- 回答としてマーク AkiraYamazaki 2014年2月25日 14:44