0

アプリケーションのセットアップ プロジェクトを準備しています。データベース接続文字列を作成し、接続文字列に基づいてスクリプト ファイルを実行し、アプリケーション構成ファイルも更新する必要があります。

ユーザー入力からデータベース接続文字列を構築できるようにするこのWPF Sql接続ユーザーコントロールがあります。

問題は 、インストーラー クラスからWPF Sql 接続ユーザー コントロールを起動しようとすると、この例外が発生することです。

エラー 1001: Assembly.GetEntryAssembly() が null を返します。Application.ResourceAssembly プロパティを設定するか、pack 構文を使用して、リソースの読み込み元のアセンブリを指定します。

ここに App.xaml.cs コードがあります

        Uri uri = new Uri(@"/WpfApplication1;component/MainWindow.xaml", UriKind.Relative);
        var window = Application.LoadComponent(uri);

私のインストーラー クラスには、アプリケーションを起動するためのこのコードがあります。

    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        var thread = new System.Threading.Thread(StartDatabaseUserControl);
        thread.SetApartmentState(System.Threading.ApartmentState.STA);
        thread.Start();
        thread.Join();
    }

ありがとう、


実装されたソリューション

まあ、私はそれを別の方法で機能させました。

Visual Studioセットアッププロジェクトでカスタムアクションプロパティ「Installer Class」をfalseに変更するとうまくいきました。

別のエントリ ポイントを追加し、それをプロジェクトのスタートアップ オブジェクトとして設定する必要がありました。App.xaml.cs ファイルにコードを追加する必要さえありません。

これが新しいエントリーポイントです

   [STAThread]
    private static void Main(string[] args)
    {
        TargetDirectory = args[0];

        var app = new App();
        app.InitializeComponent();
        app.Run();
    }
4

1 に答える 1

3

マネージ アセンブリがアンマネージ アプリケーションから読み込まれた場合、GetEntryAssembly メソッドは null を返すことができます。たとえば、アンマネージ アプリケーションが C# で記述された COM コンポーネントのインスタンスを作成する場合、C# コンポーネントから GetEntryAssembly メソッドを呼び出すと null が返されます。これは、プロセスのエントリ ポイントがマネージ アセンブリではなくアンマネージ コードであるためです。

MSDN

于 2011-02-20T02:20:00.097 に答える