天天看点

CSC动态编译,监测文件夹下改变(Windows服务形式),自动编译生成dll供web项目使用

1 监测文件夹 下面所有改变

using System;

using System.IO;

using System.Security.Permissions;

using System.Threading;

namespace 自定义

{

public class FileWatcher

{

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
    public static void IsChanged()
    {

        FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Users\Lucifer\Desktop\BizView\BizView.Model");
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite| NotifyFilters.FileName | NotifyFilters.DirectoryName;
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);
        watcher.EnableRaisingEvents = true;
    }
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        Thread.Sleep(20000);
        Compiler.BeginCompiler();
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        Thread.Sleep(20000);
        Compiler.BeginCompiler();
    }
}
           

}

2 调用.net Framework 编译器CSC,CSC基本思想应该就是安德森.海尔斯伯格的,他一开始就是开发编译器的 代码如下

using System;

using System.Reflection;

using System.Globalization;

using Microsoft.CSharp;

using System.CodeDom;

using System.CodeDom.Compiler;

using System.Text;

using System.IO;

using System.Diagnostics;

namespace 自定义

{

public class Compiler

{

#region
    /// <summary>
    /// 动态生成dll
    /// </summary>
    #endregion
    public static void BeginCompiler()
    {

        string sss = @"/t:library /r:System.dll;System.Threading.Tasks.dll;System.Linq.dll;System.ComponentModel.dll;System.ComponentModel.DataAnnotations.dll;   /out:C:\Users\**自定义路径**\自定义生成文件名(包含文件类型) C:\Users\要编译的文件夹路径\*.cs";//编译目录下所有.cs文件
        //默认.net framework 4.0 csc路径
        string FileName = "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/csc.exe";
        Process process = new Process();
        process.StartInfo.FileName = FileName;
        process.StartInfo.Arguments = sss;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.ErrorDialog = false;
        process.StartInfo.CreateNoWindow = false;
        process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        process.Start();
    }


}
           

}

3 文件监测作为Windows服务

Onstart()方法加入这句代码

FileWatcher.IsChanged();

服务已启动:

CSC动态编译,监测文件夹下改变(Windows服务形式),自动编译生成dll供web项目使用

改变目标文件夹下文件

CSC动态编译,监测文件夹下改变(Windows服务形式),自动编译生成dll供web项目使用

生成Dll

CSC动态编译,监测文件夹下改变(Windows服务形式),自动编译生成dll供web项目使用

继续阅读