0

厳密に型指定された DataSet オブジェクトをプロジェクトに追加しました。その型名はDocRetrieverDataSet. また、プロジェクト設定には、 のインスタンスを保存する DocRetrieverDataSource という名前のユーザー スコープの DataSet プロパティの行がありますDocRetrieverDataSet

煮詰めたコードは次のとおりです。

using Settings = MyProjectNameSpace.Properties.Settings;
....
private DocRetrieverDataSet myDocRetrieverDataSet;

public myForm()
{
    Initialize();
    if (Settings.Default.DocRetrieverDataSource == null)
    {
        Settings.Default.DocRetrieverDataSource = new DocRetrieverDataSet();
        Settings.Default.Save();
    }
    this.myDocRetrieverDataSet = (DocRetrieverDataSet)Settings.Default.DocRetrieverDataSource;
}

初めて実行したときSettings.Default.DocRetrieverDataSourcenull、正常に動作します! ただし、2回目に実行すると、InvalidCastExceptionat が表示されます

this.myDocRetrieverDataSet = (DocRetrieverDataSet)Settings.Default.DocRetrieverDataSource;

それは言う

Unable to cast object of type 'System.Data.DataSet' to type 'DocRetriever.DocRetrieverDataSet'.

面白いことに、最初からこの問題はありません。どうすれば修正できますか?

詳細情報: Settings.Designer.cs の関連コードは次のとおりです。

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Data.DataSet DocRetrieverDataSource {
    get {
        return ((global::System.Data.DataSet)(this["DocRetrieverDataSource"]));
    }
    set {
        this["DocRetrieverDataSource"] = value;
    }
}

そして app.config から

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=abcdefghijkl" >
            <section name="DocRetriever.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=abcdefghijkl" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <DocRetriever.Properties.Settings>
            <setting name="SpoolDirectoryPath" serializeAs="String">
                <value />
            </setting>
            <setting name="OutputDirectoryPath" serializeAs="String">
                <value />
            </setting>
        </DocRetriever.Properties.Settings>
    </userSettings>
</configuration>
4

1 に答える 1

0

設定ファイルのキャストを DataSet から DocRetrieverDataSet に変更する必要があります

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Data.DataSet DocRetrieverDataSource {
    get {
        return ((global::FullNamespace.DocRetrieverDataSet)(this["DocRetrieverDataSource"]));
    }
    set {
        this["DocRetrieverDataSource"] = value;
    }
}

設定デザイナーを介して行うこともできます。プロパティに移動してクラスを参照するだけですセッティングデザイナー

于 2014-04-17T21:49:35.483 に答える