小编Mab*_*lah的帖子

MEF运行时插件更新问题

问题

我的MEF代码在运行时期间没有从与DirectoryCatalog关联的文件夹中正确更新程序集.插件在运行时成功加载,但是当我更新dll并在DirectoryCatalog上调用Refresh时,程序集不会更新.

背景

我正在构建一个具有MEF容器的DLL,并使用DirectoryCatalog查找本地插件文件夹.我现在从一个简单的WinForm调用这个dll,设置为使用一个单独的项目来使用ShadowCopy,这样我就可以覆盖插件文件夹中的dll.我没有使用FileWatcher更新此文件夹,而是公开了一个在DirectoryCatalog上调用refresh的公共方法,因此我可以随意更新程序集而不是自动更新程序集.

基类实例化MEF目录和容器,并将它们保存为类变量,以便稍后进行参照访问

    public class FieldProcessor
{
    private CompositionContainer _container;
    private DirectoryCatalog dirCatalog;

    public FieldProcessor()
    {
        var catalog = new AggregateCatalog();
        //Adds all the parts found in the same assembly as the TestPlugin class
        catalog.Catalogs.Add(new AssemblyCatalog(typeof(TestPlugin).Assembly));
        dirCatalog = new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory + "Plugin\\");
        catalog.Catalogs.Add(dirCatalog);

        //Create the CompositionContainer with the parts in the catalog
        _container = new CompositionContainer(catalog);
    }

    public void refreshCatalog()
    {
        dirCatalog.Refresh();
    }

} ...
Run Code Online (Sandbox Code Playgroud)

这是我试图覆盖的插件.我的更新测试是,返回的stings输出到文本框,我更改了插件返回的字符串,重建并将其复制到插件文件夹中.但它不会更新正在运行的应用程序,直到我关闭并重新启动应用程序.

[Export(typeof(IPlugin))]
[ExportMetadata("PluginName", "TestPlugin2")]
public class TestPlugin2 : IPlugin
{
    public IEnumerable<IField> …
Run Code Online (Sandbox Code Playgroud)

.net c# plugins mef updates

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

.NET应用程序中的Vista异常"异常处理消息"

背景

我在4.0 Framework上构建了一个VB .NET应用程序,主要功能的一部分是内置的AxWMPLib.AxWindowsMediaPlayer,它允许我们将文件路径作为URL传递给播放器,然后通过内置的媒体播放器播放.我的开发平台是Windows 7上的VS 2010 Pro.

问题

我们最近开始在多个操作系统上测试此应用程序.应用程序在多个win7机器上的Win 7上运行良好,有些用于开发其他机器.问题是我们在Vista上运行应用程序.应用程序第一次尝试在文件打开后播放它会引发错误

在此输入图像描述

它大部分时间都是这样做的,但并不总是这样,而且我已经无法建立一个模式,因为它没有抛出错误.此外,它仅针对后续文件播放的第一个文件执行此操作.它避免了Try catchs的错误处理.

研究

我对这个问题做了很多研究.我发现它似乎困扰着其他媒体播放器和网站,甚至是某些机器上的WMP.有些文章指向特定的Windows KB更新,其他文章建议运行修复磁盘来修复可能有害的dll.我已经尝试过很多这样的失败,因为我必须测试的两台Vista机器上的问题仍然存在.

这是发生此错误时调用的方法

Public Sub playSelected(ByVal fileStr As String)
    If File.Exists(fileStr) Then
        Debugging.DebugPrint(" Play: " & fileStr)
        MediaPlayer.URL = fileStr
        Try
            MediaPlayer.Ctlcontrols.play()
        Catch ex As Exception
            MessageBox.Show("Could Not play the selected File please try again.  Exception : " + ex.Message)
        End Try
    Else
        Debugging.DebugPrint(" File Does not Exist: " & fileStr)
    End If 
End Sub
Run Code Online (Sandbox Code Playgroud)

目的

我希望找到一种方法来处理这个异常通过代码,潜在预览或狙击它,如果它是从我正在使用的.NET控件之一抛出.如果可能的话,我宁愿通过代码处理这个.如果有人也有关于此特定错误的其他信息,也会受到欢迎.

解析度

随着信息向jornare提供信息并向正确的方向发展,我将解释我的决议,以及下面的代码,希望它有所帮助.

首先,我必须以几种不同的方式修改建议的答案.在调用上面的playSelected方法的类中声明了以下两行.

Public Declare Function SetErrorMode Lib "kernel32.dll" …
Run Code Online (Sandbox Code Playgroud)

windows exception windows-vista

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

聚合物中的CSS封装限制及其Shadow DOM

问题

在使用聚合物项目时,我发现他们在Shadow DOM polyfill上的页面有一组已知的限制http://www.polymer-project.org/platform/shadow-dom.html#known-limitations.

列表的第一个限制是:

在此输入图像描述

研究

在我运行的一些简单测试中,我没有看到任何封装问题.我有一个jsbin,我一直在测试.http://jsbin.com/ANeCUv/10/edit.

为了测试我从聚合物模板里面的样式标签中删除了那个css import语句.我注意到,即使在上面标题中的样式标记中仍然调用相同的导入,该元素也变得没有样式.这至少在这种情况下向我展示了封装阻止了jquery-ui.css为我的元素的Shadow DOM设置样式.

我决定更具体地研究这个问题,并在样式指南http://www.polymer-project.org/articles/styling-elements.html的评论中找到了一些参考文献,例如这个参考文献.

在此输入图像描述

我再次使用较旧版本的IE进行了测试,并确认css正在从元素外部引用的样式中流失.

我理解聚合物及其polyfill的设计,是为了使新的Web技术可访问,并允许旧版本的浏览器支持不支持的功能或优雅地进行故障转移.所以我理解这个问题如何被视为Shadow DOM polyfill的限制.

除了支持旧浏览器的这个问题,我还没有找到其他封装问题.虽然"CSS封装有限"是一个非常通用的标签,如果唯一的特定已知限制是与旧浏览器不兼容.

摘要

除了旧版浏览器中Shadow DOM polyfill支持的不一致之外,还有CSS Encapsulation的其他已知问题吗?

javascript css html5 polymer

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

CSS动画不会通过所有关键帧

背景

我一直在努力学习更多有关CSS动画的知识.我一直主要使用像animate.css这样的库中预先构建的动画.大多数功能都很好用,我想我更了解概念和组件.

问题

然而,来自该库的一个动画,铰链,在animate.css网站上工作,但不在我自己的小提琴中.它不会完全失败,但它只会产生3个关键帧移动,而示例网站则产生5-6个.所以它正在使用动画而不是我期望的方式.

我责怪我的标题中的关键帧,因为在视觉上它似乎没有摆动.我将此归因于不起作用的关键帧,但这可能过于简单化了,或者我可能误解了这个问题,所以请注意这是假设的来源.

我用我的主浏览器Chrome v35和我的计算机上的IE 11副本进行了测试,评论员指出FF 30没有出现这个问题.他们还表明,这可能与它是一个依赖关系,当它被明确定义,而不是通过animate.css cdn拉入,它在我的浏览器中工作.

研究

我一直在做一般研究以更好地理解CSS动画,特别是这本开发人员指南有助于理解基础知识并了解实例如何工作.这些与小提琴一起特别有用,可以看到对这些示例的修改是如何工作的.

更具体的这个问题我拉开源来看看如何定义CSS动画.代码是在github上发表这里.铰链的特定关键帧如下

@keyframes hinge {
  0% {
    -webkit-transform-origin: top left;
    -ms-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  20%, 60% {
    -webkit-transform: rotate3d(0, 0, 1, 80deg);
    -ms-transform: rotate3d(0, 0, 1, 80deg);
    transform: rotate3d(0, 0, 1, 80deg);
    -webkit-transform-origin: top left;
    -ms-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  40%, 80% {
    -webkit-transform: rotate3d(0, 0, 1, 60deg); …
Run Code Online (Sandbox Code Playgroud)

css css3 css-animations

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

Java Lambda使用条件检查解析集合

我正在使用Java 8 Lambdas,并且在简单的用例方面取得了成功.我来自Java和C#.NET的混合背景,因此我熟悉代码中的lambda.

在我当前的用例中,我试图从一个名为values的Collection中返回一个List.我这样做成功了

values.stream().map(x -> x).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

相对简单明了.我想做同样的事情,但只从Collection中添加项目,其中项目上的布尔标志设置为true.我认为那会像这样工作

values.stream().map(x -> { if(x.isActive())return ((Model)x);}).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

但是编译器一直在显示这个错误:Type mismatch: cannot convert from List<Object> to List<Model>我相信编译器应该足够智能,以便从map函数中知道输出类型,并且确实在我原来的简化示例中.这就是为什么我认为这不是最好的方法.

对于.NET堆栈中的任何人来说,C#/ LINQ中的等价物都是

values.Where(x => x.isActive()).ToList();
Run Code Online (Sandbox Code Playgroud)

我知道有很多其他很好的方法可以在没有lambdas的情况下做到这一点,但我想知道如何使用Java Lambdas在Java中实现这一点?

java lambda predicate conditional-statements java-8

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