网上的例子都试了,只有FzySqr.com_PluginTutorial_Day3这个例子能运行成功,但换成mvc3的插件就不行了;
谁能给我个主程序和插件都为mvc3项目demo,并能运行成功的例子,我给200分,拜托了~谢谢各位高手~~~~~~~

解决方案 »

  1.   

    你自己创建 一个 MVC 的程序就好了. net自己有这个模板的, 
      

  2.   

    我是的是mvc3插件的应用,不是创建mvc3项目,怎么会有模版;
    还有,那200分是追加给,我在这里直接给200的帖子,万一没人能解决,不是浪费了。
      

  3.   

    mvc插件?
    为毛不直接用微软现成的mvc4.0?
      

  4.   

    以前主项目是mvc3做的,现在要开发mvc3的插件,弄死都整不出来,求高手现身了。
      

  5.   

    http://www.cnblogs.com/Mainz/archive/2012/03/06/2382653.html
      

  6.   

    这篇文章看过了,主要思路是翻译借鉴的国外的,按照这个我做了demo,运行不成功。
      

  7.   

    高手在那里,通过反射能从插件中获得控制器的类代码编译资源,主要是获取插件视图的问题,我已经试着用RazorViewEngine,动态从虚拟文件中获取视图,但总不能成功,代码如下:
     public class CustomRazorViewEngine : RazorViewEngine
         {
               public CustomRazorViewEngine(string[] viewLocations)
                : base() {
                string[] tempArray = new string[ViewLocationFormats.Length + viewLocations.Length];
                ViewLocationFormats.CopyTo(tempArray, 0);            for (int i = 0; i < viewLocations.Length; i++) {
                    tempArray[ViewLocationFormats.Length + i] = viewLocations[i];
                }            ViewLocationFormats = tempArray;            PartialViewLocationFormats = ViewLocationFormats;
            }         private bool IsAppResourcePath(string virtualPath)
             {
                 String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
                 return checkPath.StartsWith("~/Plugins/", StringComparison.InvariantCultureIgnoreCase);
             }         protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
             {
                 if (IsAppResourcePath(virtualPath))
                 {
                     return System.Web.Hosting.HostingEnvironment.VirtualPathProvider.FileExists(virtualPath);
                 }
                 else
                     return base.FileExists(controllerContext, virtualPath);
             }
         }
    继承的VirtualPathProvider类 public class AssemblyResourceProvider : System.Web.Hosting.VirtualPathProvider
        {        private bool IsAppResourcePath(string virtualPath)
            {
                String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
                return checkPath.StartsWith("~/Plugins/", StringComparison.InvariantCultureIgnoreCase);
            }        public override bool FileExists(string virtualPath)
            {
                if (IsAppResourcePath(virtualPath))
                {
                    string path = VirtualPathUtility.ToAppRelative(virtualPath);
                    string[] parts = path.Split('/');
                    string assemblyName = parts[2];
                    string resourceName = parts[3];                assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName);
                    byte[] assemblyBytes = File.ReadAllBytes(assemblyName);
                    Assembly assembly = Assembly.Load(assemblyBytes);                if (assembly != null)
                    {
                        string[] resourceList = assembly.GetManifestResourceNames();
                        bool found = Array.Exists(resourceList, delegate(string r) { return r.Equals(resourceName); });                    return found;
                    }
                    return false;
                }
                else
                    return base.FileExists(virtualPath);
            }        public override VirtualFile GetFile(string virtualPath)
            {
                if (IsAppResourcePath(virtualPath))
                    return new AssemblyResourceVirtualFile(virtualPath);
                else
                    return base.GetFile(virtualPath);
            }        public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
            {
                if (IsAppResourcePath(virtualPath))
                {
                                   return null;
                }
                return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
            }
        }