从任意路径加载和卸载WPF程序集

时间:2016-09-22 11:32:09

标签: c# wpf

我目前正在努力寻找一种从C#控制台应用程序从任意路径(不是基本路径的子目录)加载和卸载WPF程序集的方法。

我正在探索stackoverflow几天(就像我在其他一些论坛上所做的那样),但我实际上找不到如何让控制台应用程序加载WPF程序集并从程序集中实例化对象的方法

起点是以C#控制台应用程序为例:

using WPFLibrary;

namespace Caller
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            SampleWindow wnd = new SampleWindow();
            wnd.ShowDialog();
        }
     }
 }

以及以下代码作为WPF程序集:

namespace WPFLibrary
{   
    public partial class SampleWindow : Window
    {       
        public SampleWindow()
        {
            InitializeComponent();
        }
   }
}

我发现了各种类似的问题和建议:

  • 反思:Assembly.Load();
  • 使用Activator.CreateInstance();
  • 使用与CreateInstanceAndUnwrap
  • 不同的AppDomain
  • AssemblyResolve用于AppDomain等

但是如果WPFLibrary不在Caller控制台应用程序的基本路径的子目录中,我就永远无法在上面使用我的简单示例。由于我是这个领域的新手,我可能只是错过了一件简单的事情,或者这种情况可能完全不可能......任何帮助都会受到赞赏。

这个问题的背景:

如果您不想了解我对这个问题的动机,请跳过本文的剩余部分。 我们正在为商业CAD系统开发c ++ dll应用程序。该系统的接口仅为c / c ++,因此无法将完整代码更改为C#应用程序。该应用程序包括一种简单的脚本语言,该语言还允许定义和执行图形用户界面。目前,这是以win32 / MFC方式编码的,但由于它包含自构建布局管理器,因此考虑其他替代方案显然是个好主意。一个完美的匹配似乎是使用WPF,但这需要使用.NET并允许XAML定义通过C ++ / CLI dll连接的C#库似乎是一个很好的设置。

一些主要要求是:

  • 必须能够从安装应用程序加载WPF dll。
  • 需要停止并重新启动应用程序(因此还需要删除并重新加载WPF程序集。)

1 个答案:

答案 0 :(得分:0)

我必须做一些类似的事情,虽然从我的控制台应用程序我开始使用WPF应用程序。也许这会有所帮助:

<div id="454" data-info="content that need to displayed"></div>

$(document).on('click', '.userdetails', function () {
var memberid = $(this)[0].id;
var username=$(this).data('info');
var memberName = $("#memberName").val();
var mydata = 'task=' + "memberdetail" + '&ID='
    + memberid + '&current_user=' + "<?php echo $current_user->ID; ?>"
    + '&username=' + username;

$.ajax({
    url: '<?php echo get_site_url(); ?>/userrdetail.php',
    data: mydata,
    type: 'POST',
    cache: false,
    beforeSend: function () {
        $('body').scrollTop(0);
        $(".loading").removeClass("hide");
    },

    success: function (data) {
    $("#username").html(username);                  
    $("#username").css({ 'display': "inline-block" });
    }

值得注意的是,我的App类与我的控制台应用程序位于同一个程序集中,这意味着我已经引用了正常的WPF框架程序集。

相关问题