相关疑难解决方法(0)

FileSystemWatcher Changed事件被引发两次

我有一个应用程序,我正在寻找一个文本文件,如果对文件进行任何更改,我使用OnChangedeventhandler来处理事件.我正在使用NotifyFilters.LastWriteTime但事件仍被解雇两次.这是代码.

public void Initialize()
{
   FileSystemWatcher _fileWatcher = new FileSystemWatcher();
  _fileWatcher.Path = "C:\\Folder";
  _fileWatcher.NotifyFilter = NotifyFilters.LastWrite;
  _fileWatcher.Filter = "Version.txt";
  _fileWatcher.Changed += new FileSystemEventHandler(OnChanged);
  _fileWatcher.EnableRaisingEvents = true;
}

private void OnChanged(object source, FileSystemEventArgs e)
{
   .......
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下OnChanged,当我更改文本文件version.txt并保存时,会调用两次.

c# filesystemwatcher

316
推荐指数
9
解决办法
12万
查看次数

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中热插拔的参考实现?

我正在寻找在.NET中完成热交换的良好实现.我需要的是:

  • 能够在特定文件夹中部署DLL并使用正在运行的系统来获取它们.
  • 让正在运行的系统更新容器中的相应引用.

我一直在研究MEF及其目录加载机制,但它似乎非常不可靠.也许有人在那里有另一种实现方式?

.net c# mef hotswap

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

标签 统计

c# ×3

.net ×2

mef ×2

filesystemwatcher ×1

hotswap ×1

plugins ×1

updates ×1