小编jar*_*uan的帖子

CefSharp-无法加载文件或程序集“ CefSharp.Core.dll”或其依赖项之一

我已经在CefSharp WinForms应用程序上工作了几周,但我对此没有任何问题。今天早上,在向应用程序添加一些内容的同时,我尝试运行它以测试某些内容并得到以下错误:

未处理System.IO.FileNotFoundException消息:mscorlib.dll中发生了'System.IO.FileNotFoundException'类型的未处理异常。其他信息:无法加载文件或程序集'CefSharp.Core.dll'或其依赖项之一。指定的模块无法找到。

搜索一段时间后,我发现了这一点:

https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#Runtime_dependencies

我检查了bin / Debug / x86中的项目,似乎所有依赖项都存在。更重要的是,它在五分钟前运行良好,对于Entity Framework迁移,我只接触了一个类。

我曾尝试清洁和重建解决方案,重新启动Visual Studio,重新启动PC并清除/ bin / Debug,但这些都无济于事。

为什么几天后没有出现此错误,我该如何解决该问题?

编辑:我做了一些进一步的实验,我能够使应用程序在发布模式下运行,但不能在调试模式下运行。如果我将“发布”模式的输出路径更改为“调试”,则它会失败,并显示相同的错误(同样,它会在“调试”中使用“发布”输出路径成功)。

c# winforms cefsharp

5
推荐指数
5
解决办法
5899
查看次数

MVC - 通用操作

我在我正在构建的应用程序中有一个页面.该页面包含一些零碎,然后是部分视图,根据从下拉列表中选择的内容加载不同的视图.下拉列表中的每个选项都有一个与之关联的不同视图,每个视图都有自己的字段和模型.

无论视图是什么加载,我都在执行相同的操作 - 我正在序列化模型并将XML存储在数据库中.情况总是如此,并且没有基于视图/模型的唯一处理(除了字段不同的事实).所有模型都继承自相同的基类以进行序列化.

我希望能够做到这样的事情:

public ActionResult SubmitPartialView<T>(T model)
{
   BaseClass baseClassModel = (BaseClass)(object)model;
   // serialize and save to database
}
Run Code Online (Sandbox Code Playgroud)

但MVC不允许这样做 - "无法在控制器上调用操作,因为操作是一种通用方法".

如果我尝试将BaseClass作为参数本身传递,它只包含基类的属性,因此不包含模型的属性.

除了为每个可以提交的视图创建单独的操作,并且让每个视图调用一个处理逻辑的单独方法之外,没有其他选择吗?

c# generics asp.net-mvc

5
推荐指数
1
解决办法
845
查看次数

使用 javascript 从 CefSharp 浏览器获取文本框值

我有一个 winforms 应用程序,它有一个 ChromiumWebBrowser 控件和一些基本的 Windows 控件。我希望能够单击一个按钮,调用 javascript 以获取浏览器中文本框的值,并将返回的值复制到 winforms 应用程序中的文本框。这是我的代码:

string script = "(function() {return document.getElementById('Email');})();";

string returnValue = "";

var task = browser.EvaluateScriptAsync(script, new { });

await task.ContinueWith(t =>
    {
        if (!t.IsFaulted)
        {
            var response = t.Result;
            if (response.Success && response.Result != null)
            {
                returnValue = (string)response.Result;
            }
        }
    });

txtTarget.Text = returnValue;
Run Code Online (Sandbox Code Playgroud)

然而,返回的结果只是“{}”。我已经在 Chrome 中加载了相同的网页并在开发工具中执行了相同的 javascript,我得到了预期的文本框值。

我查看的演示有示例代码,只是“返回 1+1;”,当我尝试返回值“2”而不是“{}”时。有趣的是,当我尝试

string script = "(function() {return 'hello';})()";
Run Code Online (Sandbox Code Playgroud)

我仍然收到“{}”,几乎好像这不适用于字符串。

我一直在挠头一段时间,一直无法弄清楚如何解决这个问题。我是在犯一个非常基本的语法错误还是有更复杂的事情发生?

javascript c# winforms chromium-embedded cefsharp

1
推荐指数
1
解决办法
6828
查看次数

在异步方法中使用await来防止下一行代码运行

我是新手使用异步方法,所以我觉得我误解了一些东西.我有一个带按钮的WinForms应用程序,当单击该按钮时,会调用异步方法.这必须是异步的,因为我需要对Chromium Web Browser控件进行javascript调用(使用CefSharp).我需要确保此javascript已完成运行并且浏览器已更新,然后继续使用该方法的下一部分.

我基本上试图将整个网页捕获为单个图像.我的方法是使用javascript更新页面上的滚动位置,然后使用Graphics.CopyFromScreen在每个位置截取屏幕截图.这主要是有效的,但偶尔产生的图像将具有错误的网页"块"(例如,第一个位图重复两次).这是我的代码:

// Calculate screen sizes, screenshot spacing etc.

for (int i = 0; i < screenshotCount; i++)
{
    int scrollSize = i == 0 ? -PageHeight : (int)browserControlHeight;
    string script = "(function() { window.scrollBy(0, " + scrollSize.ToString() + ") })();";

    await browser.EvaluateScriptAsync(script);

    // Take screenshot, add to list of bitmaps
}

// Combine resulting list of bitmaps
Run Code Online (Sandbox Code Playgroud)

如果我添加以下内容

await Task.Delay(1000);
Run Code Online (Sandbox Code Playgroud)

在EvaluateScriptAsync()调用之后,每次最终图像都是正确的.我正在假设javascript被调用但在截图开始之前没有完成.如果是这种情况,即使添加延迟也可能不起作用(如果javascript运行的时间超过一秒,该怎么办?).

我是否误解了async/await的工作方式?

c# winforms async-await cefsharp

1
推荐指数
1
解决办法
621
查看次数