我目前正在努力寻找一种从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
AssemblyResolve
用于AppDomain等但是如果WPFLibrary不在Caller控制台应用程序的基本路径的子目录中,我就永远无法在上面使用我的简单示例。由于我是这个领域的新手,我可能只是错过了一件简单的事情,或者这种情况可能完全不可能......任何帮助都会受到赞赏。
如果您不想了解我对这个问题的动机,请跳过本文的剩余部分。 我们正在为商业CAD系统开发c ++ dll应用程序。该系统的接口仅为c / c ++,因此无法将完整代码更改为C#应用程序。该应用程序包括一种简单的脚本语言,该语言还允许定义和执行图形用户界面。目前,这是以win32 / MFC方式编码的,但由于它包含自构建布局管理器,因此考虑其他替代方案显然是个好主意。一个完美的匹配似乎是使用WPF,但这需要使用.NET并允许XAML定义通过C ++ / CLI dll连接的C#库似乎是一个很好的设置。
一些主要要求是:
答案 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 + '¤t_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框架程序集。