0

我正在为我的应用程序准备一个设置项目。我需要构造数据库连接字符串,然后根据连接字符串运行脚本文件并更新应用程序配置文件。

我有这个WPF Sql Connection User Control,它使我能够从用户输入构造数据库连接字符串。

问题是,当我尝试 从安装程序类启动WPF Sql Connection User Control时,我得到了这个异常。

错误 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 设置项目中将自定义操作属性“安装程序类”更改为 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 回答